2012-08-09 115 views
3

我想通過bash腳本遍歷包含文件名中某個單詞的目錄中的所有文件。如何使用bash腳本循環遍歷文件名中包含特定單詞的目錄中的文件?

以下腳本遍歷目錄中的所有文件,

cd path/to/directory 

for file in * 
do 
    echo $file 
done 

ls | grep 'my_word'只給已在文件名中的單詞「my_word」的文件。但是我不確定如何用ls替換*腳本中的grep'my_word'。

如果我不喜歡這個,

for file in ls | grep 'my_word' 
do 
    echo $file 
done 

它給了我一個錯誤「附近意外的標記'語法錯誤|'」。這樣做的正確方法是什麼?

+1

正確的語法是'在$文件(LS | grep '可以my_word');做',但使用'find'或者glob'仍然是正確的選擇。 – chepner 2012-08-09 11:59:06

+0

是的,謝謝,後來在史蒂夫的回答幫助下計算出來:) – 2012-08-09 13:28:03

回答

8

你永遠不應該解析ls。假設沒有子目錄,也許這是你在找什麼:

for file in *my_word*; do echo "$file"; done 

編輯:

如果您有多個子目錄,您可能需要使用find。例如,爲了cat文件:

find . -type f -name "*my_word*" | xargs cat 

或者,你可以嘗試:

for file in $(find . -type f -name "*my_word*"); do echo "$file"; done 
+0

感謝第一個作品。我如何使用循環中的第二個?那是我不知道的。我想用*代替函數結果。 – 2012-08-09 06:31:40

+0

算出來了,files ='find。 -type f -name「* my_word *」| xargs貓「和$文件中的文件的作品!謝謝! – 2012-08-09 06:36:25

+0

@SenthilKumar:很高興我能幫忙:-) – Steve 2012-08-09 06:41:11

相關問題