cp em muitos subdiretórios com *

2

Eu quero copiar um arquivo "test.sh" em diretórios que tenham todos os subdiretórios 2_bas (ex. prod1 / 2_bas, prod2 / 2_bas, etc ...)

Eu tentei:

cp test */2_bas/

mas recebo a mensagem de erro:

cp: omitting directory 'prod1/2_bas'
cp: omitting directory 'prod2/2_bas' 

Uma solução seria:

for dir in *; do [ -d "$dir" ] && cp test.sh "$dir"/2_bas ; done

Mas por que a primeira estratégia não funciona?

    
por dziadgba 24.09.2012 / 15:29

1 resposta

4

É como o comando cp foi projetado para funcionar; aceita várias fontes, mas apenas um destino. Então, sua expansão parece:

cp test prod1/2_bas prod2/2_bas prod3/2_bas .... prodN/2_bas

e o que você está dizendo cp é essencialmente copiar tudo em prodN / 2bas (o último diretório na expansão). Isso certamente não é o que você quer. A mensagem de erro que você vê é porque você está dizendo cp para copiar os diretórios e, por padrão, ele se recusa a fazê-lo (a menos que você especifique, por exemplo, -r para cópia recursiva. ainda não fará o que você quer).

Dê uma olhada na página cp man, ele declara o que o comando faz:

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Outra solução:

find ./ -type -d exec cp test {} \;
    
por roadmr 24.09.2012 / 15:36