Eu tentei copiar um arquivo test.txt
para vários diretórios com um comando:
cp ~/test.txt ~/folder1 ~/folder2
Mas não tive sucesso. Existe uma maneira de fazer isso em um comando para que eu possa copiar um arquivo ou mesmo uma pasta para vários diretórios?
command-line
cp
nux
fonte
fonte
for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; done
cp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2
Respostas:
cp
pode copiar de várias fontes, mas não pode copiar para vários destinos. Vejaman cp
para mais informações.O único comando bash que eu sei que pode copiar / salvar em vários destinos é
tee
.Você pode usá-lo no seu caso da seguinte maneira:
Observe que
tee
também grava a entrada na saída padrão (stdout). Portanto, se você não quiser isso, poderá impedi-lo redirecionando a saída padrão para a/dev/null
seguinte:fonte
>/dev/null
trabalhos com arquivos binários também, sem estragar o terminal ...-r
opção comcp
no caso de diretóriostee
ao contrário,cp
copia apenas o conteúdo do arquivo, ignorando seu modo, propriedade, timestamps. Para evitar repetir o nome do arquivo:f=text.txt; <~/$f tee ~/folder1/$f > ~/folder2/$f
Outra maneira de obter uma cópia em vários locais é o seguinte comando:
Se dir1 ou dir2 tiver subdiretórios nos quais você não deseja que o arquivo seja copiado, adicione a
-maxdepth 0
opção:Observe que isso substituirá todos os arquivos no
dir1
edir2
comfile.txt
o conteúdo, além de copiá-lo. Para copiar apenasfile.txt
sem afetar outros arquivos nesses diretórios, digafind
para agir apenas nos diretórios:fonte
find
e por duas vezes (neste caso)cp
. Para não dizer quefind
precisa de muito tempo.O comando
tenta copiar dois arquivos (
~/test.txt
e~/folder1
) para o destinofolder2
. (E se~/folder2
existir e for um diretório, você receberá um aviso "omitir diretório").Se você quiser fazer várias cópias do arquivo
test.txt
, precisará usar um loop ou vários comandos ...(... e tenha cuidado se houver espaços incorporados nos nomes dos arquivos, será necessário citar).
Para copiar diretórios inteiros, você deve usar a
-r
opção:isso criará
~/folder1/folder3
e~/folder2/folder3
com todos os arquivos incluídos.fonte
Você pode criar um script de ajuda ou pode fazê-lo com
xargs
uma função de impressão (neste casoecho
):Isso fará com que cada diretório seja um argumento para a
cp
função, usando o arquivo de teste como parâmetro.fonte
Depois de uma longa pesquisa, este trabalho também parece um encanto!
Isso copiará o arquivo.txt para todos os diretórios em sua localização atual no terminal.
Isso copiará uma pasta para cada subdiretório na sua localização atual no terminal.
Partilho que espero que ajude os outros também.
fonte
zsh
, você pode usar ofor i in *(/); ...
loop sobre todos os subdiretórios, para evitar o[ -d ...
teste. O globbing prolongado é uma das razões pelas quais eu gostobash
.zsh
, o primeiro comando desta resposta pode ser simplificado comofor dir in *(/); do cp /path/file.txt "$dir"; done
. Veja zsh.sourceforge.net/Intro/intro_2.htmlfor dir in */;
Se você deseja copiar o arquivo test.txt em todos os diretórios em / tmp / target / ...
crie um ambiente de teste:
copie-o:
fonte
Apenas pensei em dar uma variação à resposta de
Sylvain Pineau
onde
dir1
edir2
não está no seu diretório atual.find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
aqui, a busca procurará
dir1
dois níveis de profundidade ou você pode deixar de fora o-maxdepth
parâmetro para encontrardir1
em todas as pastas no diretório atual e abaixo dele.fonte