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?

Antworten:


10

Verwenden Sie rsync:

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

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/{}

@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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.