0

我需要遍历具有相同名称但递增 1 的各种目录和文件名,从 001、002、003 到 100。

/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循环不起作用,我真的不明白为什么!任何提示?谢谢。

4

2 回答 2

5

改用数组:

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,自从您开始分配任务以来,您的循环不起作用$

`$FILES=...`

它应该只是

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

仍然使用数组更安全,因为它在扩展for.

于 2013-09-16T14:43:59.710 回答
2

首先,不要使用美元符号来分配变量:

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

您根本不需要变量;您可以直接迭代 glob 模式:

for f in /Very/long/path/to/folder*/very_long_filename*.foobar; do
于 2013-09-16T14:51:03.933 回答