Bash 循环遍历具有递增名称的未知数量的文件夹

Bash 循环遍历具有递增名称的未知数量的文件夹,bash,for-loop,ubuntu,directory,Bash,For Loop,Ubuntu,Directory,我试图使用bash循环遍历未知数量的文件夹,这些文件夹以从0开始的递增数字结尾。每个文件夹都命名为processor*,其中*代表累进编号(例如processor0、processor1、processor2等)。在每个循环中,脚本应在读取U时执行这些命令find./-name'U';执行cp“$U”。/0;完成 我的for循环如下所示: for i in processor*; do cd ./processor$i find ./ -name 'U' | while read

我试图使用bash循环遍历未知数量的文件夹,这些文件夹以从0开始的递增数字结尾。每个文件夹都命名为processor*,其中*代表累进编号(例如processor0、processor1、processor2等)。在每个循环中,脚本应在读取U时执行这些命令
find./-name'U';执行cp“$U”。/0;完成

我的for循环如下所示:

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

但它目前不起作用。

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

从:

命令的
语法为:
用于名称[[in[words…]];]do命令;完成

展开
words
(请参阅),并对结果列表中的每个成员执行一次命令,将
name
绑定到当前成员

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

  • i
    在第一次迭代中具有值
    processor0
  • i
    在第二次迭代中具有值
    processor1
  • i
    在第二次迭代中具有值
    processor\u something\u other
表达式
/processor$i
在每次迭代中的计算结果如下:

  • /processorprocessor0
  • /processorprocessor1
  • /processorprocessor\u something\u other
这是因为
i
的值将随着
cd
命令的生成而展开


您真正想要的是使用
cd./“$i”

什么是“不工作”的实际含义?这是错误消息
/Allrun:line 2:cd:./processorprocessor0:没有这样的文件或目录
,然后执行
cd“$i”
。它已经是一个
处理器*
。谢谢,它可以工作了!请注意,在脚本中使用
cd
往往是危险的,因为如果由于任何原因失败,脚本的其余部分将愉快地继续运行。。。在错误的地方,用。使用显式路径更安全,例如替换
cdsomedir;使用
查找someDir/…
查找。/…