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.