Se eu estou entendendo o que você quer, a maneira mais fácil é um loop:
myList="server1 server2 server4 server5 server6 server7 server8 server9 server10"
for myDir in $myList ; do cp server3/* $myDir/ ; done
Eu tenho um diretório pai / home / test e sob esse diretório eu tenho vários diretórios. Os nomes são server {1..10} e um deles server3 possui poucos arquivos que eu copiei do servidor remoto. Eu tentei usar o cp, mas não está funcionando para mim. Existe uma maneira de copiar todos os arquivos ou um arquivo do diretório server3 para o restante dos diretórios do servidor em / home / test.
cp
pode lidar com várias origens, mas não consegue lidar com vários destinos.
Você pode usar echo dir1 dir2 dir3 | xargs -n 1 cp file1
para copiar file1
para dir1
, dir2
e dir3
, por exemplo.
Outra modificação é echo dir1 dir2 dir3 | xargs -n 1 cp /home/test/server3/*
, que copiará todos os arquivos em um determinado diretório para os diretórios ecoados.
Solução adicional, que é um pouco mais curta (sem a necessidade de inserir nomes de diretório) é:
ls -1 | grep -v server3 | xargs -n 1 cp server3/*
Por fim, parece um duplicado
Adicionando exemplo para a primeira solução:
# 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
Adicionando exemplo para a segunda solução:
# 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
Como visto, ambos os comandos copiaram todos os arquivos em server3
para outros diretórios, então é uma questão de preferência e caso de uso.
Espero que isso ajude.
A maneira mais simples é fazer isso em um loop:
for i in ./server*; do cp ./server3/testfile* "${i}"; done
Ele copiará o conteúdo do diretório server3
para cada diretório no caminho atual.
Isso também tentará copiar os arquivos para o mesmo diretório, mas apenas imprimirá que eles são os mesmos arquivos e continua.
Editar:
Para evitar mensagens de erro desagradáveis, você pode aprimorar o loop com um caractere curinga mais específico. Por exemplo, para ignorar server3
use: server[1-24-9]
Tags file-management