循环遍历未知数量的具有渐进名称的文件夹

Loop through unknown number of folders with progressive names

我正在尝试使用 bash 循环遍历未知数量的文件夹,这些文件夹以从 0 开始的递增数字结尾。每个文件夹都被命名为 processor*,其中 * 代表递增数字(例如 processor0 、处理器 1、处理器 2 等)。在每个循环中,脚本应执行这些命令 find ./ -name 'U' | while read U ; do cp "$U" ./0 ; done.

我的 for 循环看起来像这样:

for i in processor*; do
    cd ./processor$i
    find ./ -name 'U' | while read U ; do cp "$U" ./0 ; done
    cd ..
done

但它目前不起作用。

当您使用语法 for i in processor* 时,扩展 processor* 的结果将被迭代,变量 i 将保存给定迭代的结果。

来自GNU HTML manual for bash:

The syntax of the for command is:
for name [ [in [words …] ] ; ] do commands; done
Expand words (see Shell Expansions), and execute commands once for each member in the resultant list, with name bound to the current member.

例如,如果当前工作目录包含目录processor0processor1processor_something_else,并且processor*的扩展顺序是这样的,那么i 将具有以下单独迭代的值:

  • i 在第一次迭代中的值为 processor0
  • i 在第二次迭代中的值为 processor1
  • i 在第二次迭代中的值为 processor_something_else

表达式 ./processor$i 然后将在每次迭代中计算为以下内容:

  • ./processorprocessor0
  • ./processorprocessor1
  • ./processorprocessor_something_else

这是因为 i 的值将随着 cd 命令的生成而扩展。

你真正想要的是使用cd ./"$i"