问题描述
说我有多个文件
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
,
使用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