bash 脚本:从一个文件夹复制到目录中的另一个文件夹,并在多个目录上循环该过程

bash 脚本:从一个文件夹复制到目录中的另一个文件夹,并在多个目录上循环该过程

我仍然是 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.这可以处理,但不在您的原始规范中。

相关内容