批量复制到多个位置替换部分文件名
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
即可完成。如何批量复制到所有位置?
更新
为了简单起见,我使用了 loc1
、loc2
等。我正在寻找的代码应该适用于父目录中的任何子目录名称。例如,子目录名称可以是月份名称。
只需使用一个循环:
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
假设我有多个文件
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
即可完成。如何批量复制到所有位置?
更新
为了简单起见,我使用了 loc1
、loc2
等。我正在寻找的代码应该适用于父目录中的任何子目录名称。例如,子目录名称可以是月份名称。
只需使用一个循环:
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