我仍然是 bash 脚本编写的初学者。我正在尝试循环复制命令来运行多个目录。我有一组目录,P1、P2、P3、..P60。每个目录内有三个文件夹“A”、“M”和“out”。我想从 A 和 M 文件夹复制文件并将它们粘贴到“out”文件夹中。然后对所有 60 个目录重复此操作。
“AL”有一个名为 PIL_CBR.nii 的文件,“M”有一个名为 PIL_MO.nii 的文件。
谢谢你!
答案1
我假设 P1、P2、...、P60 目录位于同一文件夹中。然后,你只需要循环遍历该文件夹中的所有目录并运行cp
。在此文件夹中运行以下脚本即可。
for d in P*/ ; do
echo "$d"
cp $d/A/* $d/M/* $d/out/
done
您可能知道这里的 * 扩展为当前目录中的文件和目录名称。
答案2
假设您的目录的命名与您所说的完全一样,位于当前目录中,并且每个目录不包含数千个文件,则类似以下的内容应该有效:
for dir in P{1..60}/{A,M} ; do
[ -d "$P" ] || continue
cp "$dir"/* "${dir%[AM]}out/"
done
使用*
通配符选择目录可能有效,但存在匹配和更改您不期望的内容的风险。
这应该只与您描述的确切项目集匹配,但因此它对于您描述的情况来说是非常特定的,并且该方法可能需要针对不同的输入进行修改。
如果两个目录中的文件名冲突,则 from 的内容M
将替换A
.这可以处理,但不在您的原始规范中。