簡體   English   中英

Bash腳本,循環遍歷文件夾中的文件失敗

[英]Bash scripting, loop through files in folder fails

我正在使用以下bash腳本代碼遍歷文件夾中的某些文件(所有以MOVIE開頭的文件):

for i in MY-FOLDER/MOVIE*
do

當文件夾中有文件時,它可以正常工作。 但是,如果沒有任何文件,它將以某種方式繼續運行,並認為它是一個名為MY-FOLDER / MOVIE *的文件。

我如何避免它進入之后的東西

do

文件夾中是否沒有文件?

使用nullglob選項。

$ shopt -s nullglob
$ for i in zzz* ; do echo "$i" ; done
$ 
for i in $(find MY-FOLDER/MOVIE -type f); do
  echo $i
done

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

-type f將僅找到常規文件(而不是目錄)。

如我所寫,該命令還將在子目錄中查找文件。 您可以通過添加-maxdepth 1來防止這種情況


8年后編輯(感謝評論, @ tadman !)

您可以完全避免循環

find . -type f -exec echo "{}" \;

這告訴find通過將每個文件的名稱替換為{} echo顯每個文件的名稱。 要終止傳遞給-exec的命令,必須使用轉義的分號。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM