Verwenden Sie rsync, um alle Dateien mit Ausnahme bestimmter Dateinamen mit einer bestimmten Erweiterung zu kopieren

30606
macek

Ich habe zwei Flash-Karten gleicher Größe, und ich möchte den Inhalt von einer auf die andere anhand der folgenden Regeln kopieren:

  1. Ich möchte alle Verzeichnisse und Unterverzeichnisse an Ort und Stelle
  2. Ich möchte Dateien vom Typ .FOO, .BAR und .ZIM ausschließen (alle anderen Dateien werden kopiert)
  3. Bonus: Es wäre cool, wenn die Dateinamen beim Kopieren ausgegeben werden, wenn man bedenkt, dass ~ 8 GB an Informationen kopiert werden

Könnte das irgendwie mit "Finden" geschehen?

20

2 Antworten auf die Frage

32
John T

Dies wäre bei Verwendung von rsync mit dem Switch wesentlich einfacher .--exclude

rsync -av --exclude='*.FOO' --exclude='*.BAR' --exclude='*.ZIM' /source /dest 

Der -vSwitch liefert eine ausführliche Ausgabe, welche Dateien synchronisiert werden.

Kleine Folge hier: Die Kopie ist fertig und / src / * befindet sich jetzt in / dest / src / * Wie verwende ich rsync, um / src / * in / dest / * zu bekommen? macek vor 14 Jahren 0
Versuchen Sie `/ source / / dest ' John T vor 14 Jahren 0
Das geht nicht. Ich sehe immer noch * .FOO-Dateien, die kopiert werden. Jake vor 7 Jahren 0
Es wird angegeben, wie Sie den Pfad für --exclude angeben müssen. Wenn Sie Probleme damit haben, überprüfen Sie diese Antwort (https://unix.stackexchange.com/a/83403/136348). totymedli vor 6 Jahren 0
0
amit singh

Wenn Sie über eine große Anzahl von Erweiterungen verfügen, die ausgeschlossen werden können, können Sie eine Datei erstellen und alle Erweiterungen oder Dateien aufschreiben, die ausgeschlossen werden sollen, und nur eine Ausschlussoption verwenden, um dies zu vereinfachen.

rsync -ravz --exclude = '. / abc, txt' / source / dest

Es ist immer gut, z für die Komprimierung und die Option r zu verwenden, wenn Sie rekursiv kopieren müssen.