簡體   English   中英

Bash遍歷目錄和文件名

[英]Bash Looping through directories and filenames

我需要遍歷具有相同名稱的各種目錄和文件名,但要從001、002、003到100遞增1。

/Very/long/path/to/folder001/very_long_filename001.foobar
/Very/long/path/to/folder002/very_long_filename002.foobar
/Very/long/path/to/folder003/very_long_filename003.foobar


$FILES=/Very/long/path/to/folder*/very_long_filename*.foobar
for f in $FILES
do
  echo "$f"
done

我在上面編寫的for循環不起作用,我真的不明白為什么! 有任何提示嗎?

改用數組:

FILES=(/Very/long/path/to/folder*/very_long_filename*.foobar)
for f in "${FILES[@]}"
do
  echo "$f"
done

使它按順序運行的另一種方法:

for i in $(seq -w 001 100); do
    f="/Very/long/path/to/folder${i}/very_long_filename${i}.foobar"
    [[ -e $f ]] || continue  ## optional test.
    echo "$f"
done

順便說一句for因為您使用$開始分配,所以for循環不起作用:

`$FILES=...`

應該只是

FILES=/Very/long/path/to/folder*/very_long_filename*.foobar

仍在使用的陣列是更安全的,因為它膨脹用於在保留的文件名內的空間for

首先,不要使用美元符號來分配變量:

FILES=/Very/long/path/to/folder*/very_long_filename*.foobar

您根本不需要變量。 您可以直接在glob模式上進行迭代:

for f in /Very/long/path/to/folder*/very_long_filename*.foobar; do

暫無
暫無

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

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