批量复制到多个位置,替换文件名的一部分

问题描述

我有多个文件 file-replace-1.extfile-replace-2.ext,...,file-replace-10.ext,将其复制到位置~/tree/loc1~/tree/loc2,...,~/tree/loc5替换零件replace和相应的loc*

我一直在使用

for i in *replace*; do cp "$i" ~/"tree/loc1/${i/replace/loc1}"; done

只需loc1即可完成。如何将这种方式批量复制到所有位置?

更新

为简单起见,我使用了loc1loc2等。我正在寻找的代码应该适用于父目录中的任何子目录名称。例如,子目录名称可以是月份的名称

解决方法

只需使用循环:

for locnum in {1..5}
do
  for i in *replace*; do cp "$i" ~/"tree/loc$locnum/${i/replace/loc$locnum}"; done
done
,

使用find命令,仅打印树形结构中的目录,并将其合并到循环中,如此:

for i in *replace*
do
  find ~/tree -maxdepth 1 -type d -printf "%f\n" | while read line
  do
     if [[ "$line" != "tree" ]]
     then
       cp "$i" ~/tree/"$line"/"${i/zipped/$line}"
     fi      
  done
done