[英]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.