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

Batch copy to multiple locations replacing part of filename

假设我有多个文件 file-replace-1.ext,file-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

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

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