Como posso copiar um arquivo para as subpastas de vários diretórios com o mesmo prefixo?

1

Eu tenho um arquivo chamado "foo.txt" no meu diretório atual. Este diretório também tem pastas nomeadas myfolder1 , myfolder2 , etc ... Cada uma destas pastas tem uma subpasta chamada "constante".

Eu quero copiar "foo.txt" para myfolder1 / constant , myfolder2 / constant , etc ...

Eu tentei fazer isso com o comando:

cp foo.txt myfolder*/constant

Isso resultou no erro:

cp: omitting directory 'myfolder1/constant'
cp: omitting directory 'myfolder2/constant'
etc...

Existe uma maneira de copiar um arquivo para a subpasta de vários diretórios com o mesmo prefixo (neste caso, o prefixo 'myfolder')?

    
por Paul 14.11.2016 / 17:52

1 resposta

1

Quando cp recebe mais de dois argumentos, o último é considerado o diretório de destino e os outros os arquivos a serem copiados.

cp não sabe que você usou um curinga: os curingas são expandidos pelo shell antes que o comando os veja. Portanto, mesmo que cp tivesse algum tipo de recurso de múltiplos destinos, não poderia usar essa sintaxe.

Você precisaria de um loop. Em conchas semelhantes a Bourne:

(ret=0
for dir in myfolder*/constant/; do
  cp foo.txt "$dir" || ret=$?
done
exit "$ret")

A $ret business é para relatar qualquer falha cp no status de saída no final.

    
por 14.11.2016 / 18:11