Kopieren Sie mit Ausnahmen rekursiv alle Dateien von einem Verzeichnis in ein anderes

8

Wie muss ich alle Dateien außer ein paar Verzeichnissen von einem Verzeichnis in ein anderes kopieren. für zB:

cp -R test /www/test2 would copy all

Aber ich möchte 2 Ordner namens log und logs ausschließen.

Ich habe so etwas versucht wie:

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

Aber können Sie mir bei der Syntax helfen?

Micheal
quelle

Antworten:

10

Verwenden Sie rsync:

rsync -a --exclude=logs --exclude=log from/ to/
Bobah
quelle
Der Rynsc hat irgendwie cool für mich funktioniert!
Micheal
rsync ist jetzt mein neuer Freund :) Danke, die Erklärung ist ordentlich
Aleks
2

Ich denke, Sie suchen etwas wie:

find dir -type d ! \( -name 'log' -o -name 'logs' \) | xargs -I{} cp -R {} /www/test2/{}
Tim Pote
quelle
@sputnick siehe meine Änderungen. Fühlen Sie sich frei, den Emacs Regex dafür anzubieten, wenn Sie es zufällig wissen.
Tim Pote
0

Bei Verwendung von :

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

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

Gilles Quenot
quelle
Was passiert, wenn die Struktur so ist : test/someotherdir/logs? OP hat nie gesagt logund logswar das zweithöchste Verzeichnis.
Tim Pote
Wenn Sie OP-Befehlsprotokoll erneut lesen, find ~test -not -name logs,logsollten Protokolle und Protokolle ein Unterverzeichnis sein.
Gilles Quenot
findDurchsucht rekursiv alle Unterverzeichnisse. File Globbing nicht. Für Ihre Antwort auf Arbeit, logund logssein müßte sofort Unterverzeichnisse von test.
Tim Pote