copie recursivamente todos os arquivos de um diretório para outro, com exceções


8

Como eu preciso copiar todos os arquivos, exceto alguns diretórios de um diretório para outro. por exemplo:

cp -R test /www/test2 would copy all

Mas eu quero excluir 2 pastas chamadas log e logs.

Eu tentei algo como:

find ~test -not -name logs,log |  cp -R test /www/test2 

Mas você pode me ajudar com a sintaxe?

Respostas:


10

Use rsync:

rsync -a --exclude=logs --exclude=log from/ to/

o rynsc meio que funcionou bem para mim!
Micheal

rsync é agora meu novo amigo :) Obrigado, a explicação é puro
Aleks

2

Eu acho que você está procurando algo como:

find dir -type d ! \( -name 'log' -o -name 'logs' \) | xargs -I{} cp -R {} /www/test2/{}

@sputnick ver minhas alterações. Sinta-se livre para oferecer a regex do emacs para isso, se você conhece.
precisa

0

Se estiver usando o :

shopt -s extglob
cp -R test/!(log|logs) /www/test2

Consulte http://wiki.bash-hackers.org/syntax/pattern


O que acontece quando a estrutura é assim test/someotherdir/logs:? O OP nunca disse loge logsfoi o segundo diretório mais alto.
precisa

Se você reler o find ~test -not -name logs,loglog do comando OP, os logs deverão ser um subdiretório.
Gilles Quenot

findolha recursivamente em todos os subdiretórios. Arquivo globbing não. Para a sua resposta funcionar, loge logsteria que ser subdiretório imediato de test.
quer
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.