在不同目录名之间应用命令

在不同目录名之间应用命令

我在path1中保存了目录A、B、C,在path2中保存了目录A_1、A_2、A_3、B_1、B_2、B_3、C_1、C_2、C_3

我在路径 1 的目录 A、B、C 中保存了相同的“file.txt”副本

我想在path2 中的每个目录中制作“file.txt”的副本。我尝试了 for 循环,如下所示:

#!/bin/bash
path1=path to directories A, B, C
path2=path to directories A_1, A_2, A_3, B_1, B_2, B_3, C_1, C_2, C_3
for i in $(cat dirname.txt); do #dirname.txt is a file located in path1 contain the directories names in path1 (i.e A, B, C)
cp $path1/${i}/file.txt $path2/${i}_*/
done

前面的代码无法读取path2中的目录。

我做错了什么?

答案1

CP可以采用多个源,但不能采用多个目的地。如果你想通过展开来获取目标目录 "path2/${i}_"*/,那么你需要第二个for循环:

for i in A B C; do
   for j in "path2/${i}_"*/; do
      cp "$path1/$i/file.txt" "$j"
   done 
done

或者,您可以自己生成目标目录名称:

for i in A B C; do
   for j in "path2/${i}_"{1..3}/; do
      cp "$path1/$i/file.txt" "$j"
   done 
done

不要忘记,默认情况下您应该用双引号引用 shell 变量扩展,除非您有特定原因不加引号。

相关内容