
Wie können wir eine Datei und/oder ein Verzeichnis nur dann kopieren, wenn die Datei auf dem Ziel vorhanden ist und nur dann, wenn sie neuer ist als auf dem Ziel, und für den Fall eines Verzeichnisses muss sierekursivKopie mit der Fähigkeit
,
$ ls -a ~/.config
gtk-2.0/
gtk-3.0/
SpeedCrunch/
$ ls -a /other/path/home/.config/
gtk-2.0/
gtk-3.0/
SpeedCrunch/
$ rsync -u --existing ~/.config /other/path/home/
skipping directory .
kann nicht funktionieren.
Welches Linux-Dienstprogramm und wie kann ich es ausführen/lösen? Vielen Dank im Voraus
Antwort1
Schnell:
Sie haben vergessen, den rekursiven Schalter "-r" einzuschließen:
rsync -u --existing -r ~/.config /other/path/home/
Zusätzliches Zeug:
Sie können auch die Verwendung -a
eines Schalters in Betracht ziehen, der gleich ist, -rlptgoD
um rekursiv zu sein und darüber hinaus einige wichtige Attribute wie folgt beizubehalten:
- -r: rekursiv in Verzeichnisse
- -l: Symlinks als Symlinks kopieren
- -p: Berechtigungen beibehalten
- -t: Änderungszeiten beibehalten
- -g: Gruppe beibehalten
- -o: Besitzer beibehalten (nur Superuser)
- -D: spezielle Dateien beibehalten wie --devices --specials
Zum Testen verwenden Sie Folgendes:
mkdir src
touch src/file{1..3}
touch src/thefile
# Destination:
mkdir dst
touch dst/file{1..3}
touch -d 20201023 dst/thefile
# List all
free -D src dst
Versuch's jetzt:
rsync -rt -uPv --existing src dst/
Ich benutzte:
- -r: rekursiv in Verzeichnisse
- -t: Änderungszeiten beibehalten
- -u: Dateien überspringen, die auf dem Empfänger neuer sind
- -P: Fortschritt während der Übertragung anzeigen
- -v: Ausführlichkeit erhöhen
- --existing: Überspringen des Erstellens neuer Dateien auf dem Empfänger