admin:linux:cli:rsync

rsync

siehe auch: rsnapshot

Bei Verzeichnissen kopiert rsync mit einem angehängten Slash beim Quellverzeichnis den Inhalt des Verzeichnisses und ohne erstellt es das Verzeichnis neu. Beim Zielverzeichnis ist es egal. Beispiele:

Source Destination Ordnerstruktur
./files/dir1/ /backup/dir1 /backup/dir1
./files/dir1 /backup/dir1
/backup/dir1/
/backup/dir1/dir1
./files/dir1/ /backup/dir1 /backup/dir1
Switch Beschreibung
-a archive mode (kurz für -rlptgoD)
-r, –recursive steigt rekursiv in die angegebenen Verzeichnisse ab
-l, –links kopiert Symlinks als Symlinks
-p, –perms behält Rechte bei
-t, –times behält Änderungszeitpunkt bei
-g, –group behält Gruppeneigentum bei
-o, –owner behält Eigentümer bei
-D, –devices –specials behält Geräte- (nur su!) und Spezialdateien bei
-n, –dry-run Testlauf
-b, –backup Backups überschriebener/gelöschter Dateien anlegen
–backup-dir=$dir speichert Sicherungsdateien in angegebenem Ordner
–backup-dir=$(date +%F) Backups in ./yyyy-mm-dd/
–delete sollte nur zusammen mit -b verwendet werden!
löscht Dateien im Zielverzeichnis, wenn sie im Quellverzeichnis nicht vorhanden sind
–max-size=2G verhindert Übertragung von Dateien größer als 2GiB
–min-size=256 überträgt keine Dateien <256 Bytes
-q, –quiet unterdrückt Ausgaben (z.B. für cron)
-z, –compress Dateien beim Transfer komprimieren
–progress zeigt Einzelfortschritt an
–info=progress2 zeigt Gesamtfortschritt an (erst ab v3.1)
-e "ssh -p$port" verbindet über SSH, Beispieloption für den Port
–filter=$datei Filterregeln aus Datei lesen
Zeilenbeginn Bedeutung
+ Inklusion
- Exklusion
# Kommentar (wird ignoriert)
Muster Bedeutung
/$file Datei $file im Wurzelverzeichnis
$dir/ Verzeichnisse, die $dir heißen

~/.rsync-exclude

# Filterdatei selbst ausschließen
- /rsync-filter.txt
# Download-Ordner im Wurzelverzeichnis ausschließen
- /Downloads/
# Papierkorb nicht mitsichern
- /.Trash*/
# Thumbnails nicht mitsichern
- .DS_Store
- Thumbs.db
# Cache-Ordner

**TODO**

# "geheime" Dotfiles ausschließen
- /.*sh_history
# Druckerspooler nicht sichern
- /.cups/
# keine Cloud-Ordner sichern
- /.dropbox/
- /.dropbox-master/
- /Google\ Drive/
- /Dropbox/

Synchronisiert nur bis zu einer Tiefe von 2 Ordnern und nicht weiter:

rsync -r --exclude="/*/*/" source/ target/

Je nach gewünschter Tiefe das "exclude" erweitern.

rsync -mnrv --include="*/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/
-m löscht leere Ordner
–include="*/" Geht durch alle Ordner
–exclude="*" ignoriert alle Dateien, die nicht inkludiert wurden

Ein funktionierendes passwortloses SSH-Setup ist von Vorteil.

Systemvoraussetzungen

  • rsync 3.0+ muss installiert sein (kein Abgleich von Dateilisten mehr)

Backup des Benutzerverzeichnisses

/usr/local/bin/rsync -az --progress -e "ssh -pPORT" /Users/BENUTZER/ BENUTZER@SERVER:/backup/BENUTZER/

Wichtig: Slash am Ende des Quell- und Zielverzeichnisses! Kopiert alle Inhalte (Dateien und Unterordner) im Benutzer-Heimatverzeichnis in den Backup-Ordner des Benutzers. Kein Slash = Kopiert das Verzeichnis an sich.

rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* /path/to/backup/folder

(Quelle)

  • rsync 3.0+ muss installiert sein
  • openSSH muss installiert sein
  • es ist nicht empfehlenswert, rsync im Server-Modus laufen zu lassen. Über SSH verliert man nur extrem wenig Geschwindigkeit, aber es ist viel sicherer.
/usr/local/bin/validated-rsync
#!/bin/sh
 
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\>*)
echo "Rejected"
;;
*\`*)
echo "Rejected"
;;
*\|*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac

Alternative: rrsync ("restricted rsync")

  • Last modified: 2019-12-20 14:21