copier récursivement tous les fichiers d'un répertoire à un autre avec des exceptions

8

Comment dois-je copier tous les fichiers à l'exception de quelques répertoires d'un répertoire à un autre. par exemple:

cp -R test /www/test2 would copy all

Mais je veux exclure 2 dossiers appelés journaux et journaux.

J'ai essayé quelque chose comme:

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

Mais pouvez-vous m'aider avec la syntaxe?

Micheal
la source

Réponses:

10

Utilisez rsync:

rsync -a --exclude=logs --exclude=log from/ to/
bobah
la source
le rynsc a plutôt bien fonctionné pour moi!
Micheal
rsync est maintenant mon nouvel ami :) Merci, l'explication est soignée
Aleks
2

Je pense que vous cherchez quelque chose comme:

find dir -type d ! \( -name 'log' -o -name 'logs' \) | xargs -I{} cp -R {} /www/test2/{}
Tim Pote
la source
@sputnick voir mes changements. N'hésitez pas à proposer le regex emacs pour cela si vous le savez.
Tim Pote
0

Si vous utilisez :

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

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

Gilles Quenot
la source
Que se passe-t-il lorsque la structure est ainsi test/someotherdir/logs:? OP n'a jamais dit loget logsétait le deuxième répertoire le plus élevé.
Tim Pote
Si vous relisez le find ~test -not -name logs,logjournal des commandes OP, les journaux doivent être un sous-répertoire.
Gilles Quenot
findrecherche récursivement dans tous les sous-répertoires. La globalisation de fichiers ne le fait pas. Pour que votre réponse fonctionne, loget logsdevrait être des sous-répertoires immédiats de test.
Tim Pote