Wie kann ich mit cp ein Verzeichnis kopieren, aber ein bestimmtes Unterverzeichnis unter Linux ignorieren?

9

Aufgrund eines Festplattenproblems versuche ich, eine Partition von einer Festplatte auf eine andere zu verschieben. Ich folge dem Artikel http://www.ibm.com/developerworks/library/l-partplan.html, um dies zu tun. Im Kopierteil möchte ich ein bestimmtes Unterverzeichnis ignorieren. Wie kann ich das erreichen? Beachten Sie beim Kopieren, dass ich meine Eigentümergruppe und meinen Zeitstempel beibehalten muss. Es gibt ungefähr 700 GB Daten, die kopiert werden müssen, wenn ich ein bestimmtes Unterverzeichnis nicht ignoriere.

P Roy
quelle

Antworten:

11

rsync -ax --exclude [relative path to directory to exclude] /path/from /path/to

Möglicherweise möchten (oder nicht) --delauch verwenden. Überprüfen Sie die Handbuchseite.

Marco Mariani
quelle
Ja, das hat den Trick gemacht. Dies funktioniert ..
P Roy
2

Normalerweise benutze ich cpiowie folgt:

cd source_dir; find . -depth | cpio -pdmv dest_dir

Und da dies eine Pipeline ist, können Sie einen "Subtraktionsfilter" in die Mitte setzen.

cd sourcedir; find . -depth | grep -v exclude_dir | cpio -pdmv dest_dir

oder Sie könnten dies in mehrere Schritte aufteilen,

cd source_dir; find . -depth > files.lst
gedit files.lst  # (take out the offending directory and files and save back to files.lst)
cpio -pdmv dest_dir < files.lst

Natürlich würde ich das zuerst an etwas Kleinerem testen, aber Sie haben die Idee.

hotei
quelle
0

Können Sie mvdas große Unterverzeichnis vorübergehend an einen anderen Speicherort verschieben ( ), kopieren und dann das Unterverzeichnis wiederherstellen? Ich kann keine direkte Option cpdafür sehen.

Asche
quelle
Ich habe auch man cp überprüft, es gibt keine Möglichkeit, cp zu ignorieren. Ich habe 550 GB Daten in diesem Unterverzeichnis und mv, die Stunden dauern können.
P Roy
Ich ging davon aus, dass mv ein relativ kostengünstiger Vorgang ist - das Aktualisieren von Verweisen auf die Daten, anstatt sie physisch auf der Festplatte zu verschieben. Zumindest habe ich immer festgestellt, dass Bewegungen in Windows viel schneller sind als Kopien - das Linux-Dateisystem könnte ganz anders funktionieren.
Ash
mv auf die gleiche festplatte ist schnell. Aber wenn man einen MV über Hardisks macht, dauert es meiner Meinung nach genauso lange wie ein CP.
P Roy
Ich wollte es irgendwo auf dieselbe Festplatte verschieben, um es aus dem Weg zu räumen, dann den Rest auf die Remote-Festplatte kopieren und dann die große Datei zurück verschieben. Es sei denn, Sie kopieren die gesamte Festplatte von /.
Ash
0

Eher hässliche Lösung, aber ... warum nicht einfach alles im Verzeichnis nicht rekursiv kopieren und dann die einzelnen Verzeichnisse rekursiv kopieren?

Gesellenfreak
quelle
-1

Warum also nicht einfach?

cp -Rv [SRC] [DEST] | grep -v [EXCLUDE]
halfcab123
quelle