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

Bash 批量复制到多个位置,替换部分文件名,bash,rename,filenames,batch-rename,cp,Bash,Rename,Filenames,Batch Rename,Cp,假设我有多个文件 file-replace-1.ext,file-replace-2.ext,…,file-replace-10.ext复制到位置~/tree/loc1,~/tree/loc2,~/tree/loc5用相应的loc*/code>替换零件替换 我一直在使用 for i in *replace*; do cp "$i" ~/"tree/loc1/${i/replace/loc1}"; done 只需loc1即可完成。如何以这种方式批量复制到所

假设我有多个文件
file-replace-1.ext
file-replace-2.ext
,…,
file-replace-10.ext
复制到位置
~/tree/loc1
~/tree/loc2
~/tree/loc5
用相应的
loc*/code>替换零件
替换

我一直在使用

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 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

使用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


引用阻止bash扩展
~
。将
“~/tree
替换为
~/”tree
。引用可防止bash扩展
~
。将
“~/tree
替换为
~/”tree
。对不起,为了简单起见,我使用了
loc1
loc2
,等等。相反,我有月份、一月、二月等的名称。想法是一样的:你需要循环你的月份名称。如何循环子目录名称?@Praveen
对于subdirectory yname1 subdirectory yname2中的subdirectory yname……
子目录名称是monthsorry的名称,为了简单起见,我使用了
loc1
loc2
,等等。相反,我有月份、一月、二月等的名称。想法是一样的:你需要循环你的月份名称。如何循环子目录名称?@Praveen
对于子目录yname1子目录yname2中的子目录yname……
子目录名称是月份的名称
$line
也需要引用。毕竟,它可能包含空格。非常正确。我已经修改了。这可以工作,但我得到一个错误
cp:无法创建常规文件“~/tree/tree/fixtrefix.ext”:没有这样的文件或目录
树下是否有任何其他目录不想将文件移动到其中?这是%f在输出中显示顶级目录的方式。我添加了一个if语句来解决问题
$line
也需要引用。毕竟,它可能包含空格。非常正确。我已经修改了。这可以工作,但我得到一个错误
cp:无法创建常规文件“~/tree/tree/fixtrefix.ext”:没有这样的文件或目录
树下是否有任何其他目录不想将文件移动到其中?这是%f在输出中显示顶级目录的方式。我添加了一个if语句来解决这个问题