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?

Micheal
fonte

Respostas:

10

Use rsync:

rsync -a --exclude=logs --exclude=log from/ to/
bobah
fonte
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/{}
Tim Pote
fonte
@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

Gilles Quenot
fonte
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