Verzeichnis rekursiv kopieren, nur wenn die Datei auf dem Ziel vorhanden ist und nur wenn sie neuer als das Ziel ist

Verzeichnis rekursiv kopieren, nur wenn die Datei auf dem Ziel vorhanden ist und nur wenn sie neuer als das Ziel ist

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 -aeines Schalters in Betracht ziehen, der gleich ist, -rlptgoDum 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

verwandte Informationen