Wie kann ich alle Unterverzeichnisse ausschließen, aber Dateien eines Verzeichnisses in rsync einschließen?

13

Ich möchte mein Ubuntu-System sichern und muss zwei Partitionen beachten: Eine ist /, eine andere ist /home.

Ich werde wahrscheinlich ein Backup machen wollen /. Dies ist nicht einmal so groß, so dass ich es auf meiner SD-Karte tragen kann, während ich schnell genug reagieren kann, um ein Image davon zu haben (deshalb versuche ich gerade, rsync zu verwenden).

Und über /home, es hat viele Unterverzeichnisse , dass ich nicht zu viel kümmern , damit ich nicht wahrscheinlich sind sie, aber ich möchte darauf achten , um Dateien auf dort, so wie .bash_history, .bashrc, .face, und so weiter.

Ich möchte also alle Unterverzeichnisse ausschließen, während ich Dateien einbinde /home. Wie kann ich das erreichen?

--exclude "*/"hat nicht funktioniert. "/*/", "/**/", --include "*" --exclude */Nicht zeigen Sie mir nicht , was ich will. Zumindest kopierte es den Quellordner, ohne irgendetwas darin zu kopieren.

Dinir
quelle

Antworten:

17

Versuchen Sie diesen Befehl:

rsync -a -f"- */" -f"+ *" /home/user/ destination/

man rsync

-f, --filter=RULE           add a file-filtering RULE

Die Regel, um alle Dateien *einzuschließen und die Verzeichnisse auszuschließen*/

Ein anderer Ansatz, um die reguläre Kopie zu verwenden cp

cp /home/usr/* /destination

Sie können die Fehler in Bezug auf Verzeichnisse mithilfe der Umleitung beseitigen

cp /home/usr/* /destination 2>/dev/null

Dadurch werden nur die Dateien in Ihrem Haus ohne die Verzeichnisse kopiert

Maythux
quelle
/ proc hat ein virtuelles unwirkliches Dateisystem. Sie sollten es von der Sicherung ausschließen. Sie sollten auch / tmp und / run ausschließen
Maythux
Mein ursprünglicher Befehl zum Sichern von Dingen lautete wie rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H -b -s --exclude home/dinir/ --exclude media/ --exclude proc/kcore / /home/dinir/Temporal Site for Storing Backups
folgt
/ proc, / tmp und / run, Check! Wie Sie in meinem Kommentar sehen, sollte ich mit wenigen Ausnahmen das gesamte Root-Dateisystem mit Ausnahme des Basisverzeichnisses sichern. Wäre -f" */" -f"+ *"es sicher , das in meinen Code einzufügen? Vielleicht wäre es so -f"- home/dinir/*/" -f"+ home/dinir/*"?
Dinir,
Sie sollten es so verwenden-f"- home/dinir/*/" -f"+ home/dinir/*"
Maythux
aber ich
rate ihnen,
3

Wenn Sie dies mit --includeund --exclude-Parametern lösen möchten , sollten Sie deren Reihenfolge ändern: Schließen Sie zuerst aus, was Sie möchten, und schließen Sie dann alles ein. Ich mache es normalerweise mit diesem Befehl:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
Mattia72
quelle
2

Kopiert standardmäßig rsynckeine Verzeichnisse. Vielleicht benutzen Sie die -aFlagge. Wenn dies der Fall ist, bekannt , dass gemäß der Manpage , -aäquivalent ist -rlptgoD, wenn Sie also nicht Rekursion wollen, verwenden Sie einfach -lptgoD.

Brian Moths
quelle