2010-07-12 88 views
0

這是我用來解壓tar文件內容的文件grep然後刪除untared文件的代碼。我沒有足夠的空間一次解壓所有文件。我在`ls | grep`問題

我遇到的問題是與'ls | f中的' grep -v * .gz這行應該是找到已經出來的tar文件,並且可以通過沒有.tar.gz擴展名來識別,但是它似乎沒有提取它們?

任何幫助,將不勝感激

中號

for i in *.tar.gz; 
do echo $i >>outtput1; 
    tar -xvvzf $i; mv $i ./processed/; 
    for f in `ls | grep -v *.gz`; ----- this is the line that isn't working 
    do echo $f >> outtput1; 
    grep 93149249194 $f >> 
    outtput1; grep 788 $f >> outtput1; 
    rm -f $f; 
    done; 
done 

回答

3

嘗試ls -1 | grep -v "\\.gz$"-1將使ls每行輸出一個結果。我也通過幾種方式爲您修正了正則表達式。

雖然解決這個問題的更好方法是使用find -exec

+0

不需要-1。當你輸出ls的時候,通常這些文件是一個接一個地給出的。 – thegeek 2010-07-13 08:16:41

+0

@thegeek:爲什麼,他們是。俏皮。 – Borealid 2010-07-13 11:07:34

0

將其更改爲ls | grep -v "*.gz",您必須引用*.gz,否則它只會在工作目錄中對文件進行填充並對它們進行grep。

0

不要在腳本中使用ls,也不要使用grep來匹配文件模式。改用globbing和測試:

for f in * 
do 
    if [[ $f != *.gz ]] 
    then 
     ... 
    fi 
done