我有一个父目录 /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
它将复制file1
到dir1
、dir2
和。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
到其他目录中,因此这是一个偏好和用例的问题。