Bash 循环遍历具有递增名称的未知数量的文件夹
我试图使用bash循环遍历未知数量的文件夹,这些文件夹以从0开始的递增数字结尾。每个文件夹都命名为processor*,其中*代表累进编号(例如processor0、processor1、processor2等)。在每个循环中,脚本应在读取U时执行这些命令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
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/…
查找。/…
。