2011-09-19 91 views
12

我通過某些文件循環(所有文件開始MOVIE)的文件夾與此bash腳本代碼:巴什腳本,遍歷文件夾中的文件失敗

for i in MY-FOLDER/MOVIE* 
do 

當有文件,工作正常文件夾。但是,如果沒有,它會以某種方式繼續進行,它認爲它被命名爲MY-FOLDER/MOVIE *。

如何避免它如果沒有該文件夾中的所有文件後

do 

進入東西呢?

回答

11
for i in $(find MY-FOLDER/MOVIE -type f); do 
    echo $i 
done 

find效用是Linux的瑞士軍刀之一。根據您提供的選項,它從您提供的目錄開始,並找到所有子目錄中的所有文件。

-type f只會找到普通文件(不是目錄)。

正如我寫的那樣,該命令也會在子目錄中找到文件;你可以通過加入-maxdepth 1

+1

找到的是瑞士軍刀,屬實。但是用for循環的方式很容易在包含空格的文件上失敗。 –

+1

此外,由於您離開我沒有引用,這將在'echo $ i'上分割。參見[此](http://stackoverflow.com/a/7039579/3076724),用於更好的語法的例子。 – BroSlow

13

使用nullglob選項。

$ shopt -s nullglob 
$ for i in zzz* ; do echo "$i" ; done 
$ 
+0

即使沒有'nullglob'選項,你的代碼對我有用,我做錯了什麼? –

+0

@DenisGolomazov:你有匹配的文件。嘗試使用不匹配文件的glob。 –

+0

謝謝,明白了。結果是'zzz *'。 –

3
 
for file in MY-FOLDER/MOVIE* 
do 
    # Skip if not a file 
    test -f "$file" || continue 
    # Now you know it's a file. 
    ... 
done