Copie um arquivo para pastas diferentes e com nomes diferentes

0

Eu preciso copiar um arquivo da pasta / a / b / para / a / c /, a / d /, a / e /

Além de usar

cp file.name / a / c cp file.name / a / d cp file.name / a / e

no terminal, existe uma maneira de usar uma linha? Eu li e vi que existem maneiras, mas acho que minha situação é diferente, pois os nomes das pastas de destino são diferentes.

Eu também quero perguntar que é possível cp um arquivo em uma pasta de destino e um nível recursivo dentro. Então, se há uma pasta que tem um / b / c / d, e você soltá-lo em um, vai para b e b / c, e não b / c / d.

    
por Niko 28.02.2018 / 05:41

2 respostas

0

Bem, isso é ruim porque cp can copy multiple sources but cannot copy to multiple destinations é o que você precisa. Para que isso funcione, você invocou o cp várias vezes - uma vez por destino que você já tentou. O que você quer pode ser realizado por

1. Usando para loop

for i in /a/c/ a/d/ a/e/; do cp "$file" "$i"; done

Isso é bem auto-explicativo.

2. combinando cp com xargs :

$ echo dir1 dir2 dir3 | xargs -n 1 cp file1

Copiará o arquivo1 para dir1, dir2 e dir3. xargs irá chamar cp 3 vezes para fazer isso. xargs invocará cp 3 vezes e copiará o arquivo1 para dir1, dir2 e dir3 em chamadas sucessivas.

No seu caso, será

$ echo /a/c/ a/d/ a/e/ | xargs -n 1 cp /a/b/file

Para mais detalhes sobre xargs, consulte página de manual .

    
por C0deDaedalus 28.02.2018 / 06:02
1

É uma trapaça, mas você pode redirecionar o conteúdo do arquivo para vários destinos usando tee :

tee a/{b..d}/file.name < file.name > /dev/null
    
por steeldriver 28.02.2018 / 06:04