将一个目录下的所有文件复制到同一父目录下的所有目录

将一个目录下的所有文件复制到同一父目录下的所有目录

我有一个父目录 /home/test ,在该目录下有多个目录。名称是 server{1..10},其中 server3 有几个我从远程服务器复制的文件。我尝试使用 cp 但它对我不起作用。有没有一种方法可以将所有文件或一个文件从 server3 目录复制到 /home/test 下的其余服务器目录。

答案1

如果我理解你想要什么,最简单的方法是 for 循环:

myList="server1 server2 server4 server5 server6 server7 server8 server9 server10"
for myDir in $myList ; do cp server3/* $myDir/ ; done

答案2

最简单的方法是在一个循环中执行此操作:

for i in ./server*; do cp ./server3/testfile* "${i}"; done

它将server3目录的内容复制到当前路径中的每个目录。这也将尝试将文件复制到同一目录,但它只会打印出它们是相同的文件并继续。

编辑: 为了避免讨厌的错误消息,您可以使用更具体的通配符增强 for 循环。例如要跳过server3使用以下内容:server[1-24-9]

答案3

cp可以处理多个源,但不能处理多个目的地。

例如,您可以使用echo dir1 dir2 dir3 | xargs -n 1 cp file1它将复制file1dir1dir2和。dir3

另一个修改是echo dir1 dir2 dir3 | xargs -n 1 cp /home/test/server3/*将给定目录中的所有文件复制到回显目录。

稍微短一点的附加解决方案(不需要输入目录名称)是:

ls -1 | grep -v server3 | xargs -n 1 cp server3/*

最后,似乎是一个复制

添加第一个解决方案的示例:

# creating sample dir structure
[shadowe@shadow Desktop]$ mkdir server1
[shadowe@shadow Desktop]$ mkdir server2
[shadowe@shadow Desktop]$ mkdir server3
[shadowe@shadow Desktop]$ touch server3/test.one
[shadowe@shadow Desktop]$ touch server3/test.two
[shadowe@shadow Desktop]$ ls -R
./server1:
./server2:
./server3:
test.one  test.two

# executing solution
$ echo /home/shadowe/Desktop/server2/ /home/shadowe/Desktop/server1/ | xargs -n 1 cp /home/shadowe/Desktop/server3/*

# verifying solution
[shadowe@shadow Desktop]$ ls -R
./server1:
test.one  test.two
./server2:
test.one  test.two
./server3:
test.one  test.two

添加第二个解决方案的示例:

# showing directories structure and initial state
$ ls -R
server1:
server2:
server3:
test.one  test.two
server4:
server5:
server6:

# executing command
$ ls -1 | grep -v server3 | xargs -n 1 cp server3/*

# checking results
$ ls -R
./server1:
test.one  test.two
./server2:
test.one  test.two
./server3:
test.one  test.two
./server4:
test.one  test.two
./server5:
test.one  test.two
./server6:
test.one  test.two

如图所示,这两个命令都将所有文件复制server3到其他目录中,因此这是一个偏好和用例的问题。

相关内容