Copiando todos os arquivos de um diretório para todos os diretórios no mesmo diretório pai

3

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.

    
por user67186 08.08.2014 / 22:12

3 respostas

1

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
    
por 08.08.2014 / 22:38
1

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.

    
por 08.08.2014 / 22:24
1

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]

    
por 08.08.2014 / 23:14