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