我通過某些文件循環(所有文件開始MOVIE)的文件夾與此bash腳本代碼:巴什腳本,遍歷文件夾中的文件失敗
for i in MY-FOLDER/MOVIE*
do
當有文件,工作正常文件夾。但是,如果沒有,它會以某種方式繼續進行,它認爲它被命名爲MY-FOLDER/MOVIE *。
如何避免它如果沒有該文件夾中的所有文件後
do
進入東西呢?
我通過某些文件循環(所有文件開始MOVIE)的文件夾與此bash腳本代碼:巴什腳本,遍歷文件夾中的文件失敗
for i in MY-FOLDER/MOVIE*
do
當有文件,工作正常文件夾。但是,如果沒有,它會以某種方式繼續進行,它認爲它被命名爲MY-FOLDER/MOVIE *。
如何避免它如果沒有該文件夾中的所有文件後
do
進入東西呢?
for i in $(find MY-FOLDER/MOVIE -type f); do
echo $i
done
的find
效用是Linux的瑞士軍刀之一。根據您提供的選項,它從您提供的目錄開始,並找到所有子目錄中的所有文件。
-type f
只會找到普通文件(不是目錄)。
正如我寫的那樣,該命令也會在子目錄中找到文件;你可以通過加入-maxdepth 1
使用nullglob
選項。
$ shopt -s nullglob
$ for i in zzz* ; do echo "$i" ; done
$
即使沒有'nullglob'選項,你的代碼對我有用,我做錯了什麼? –
@DenisGolomazov:你有匹配的文件。嘗試使用不匹配文件的glob。 –
謝謝,明白了。結果是'zzz *'。 –
for file in MY-FOLDER/MOVIE* do # Skip if not a file test -f "$file" || continue # Now you know it's a file. ... done
找到的是瑞士軍刀,屬實。但是用for循環的方式很容易在包含空格的文件上失敗。 –
此外,由於您離開我沒有引用,這將在'echo $ i'上分割。參見[此](http://stackoverflow.com/a/7039579/3076724),用於更好的語法的例子。 – BroSlow