Rsync nur Dateien von bestimmten Benutzern

Rsync nur Dateien von bestimmten Benutzern

Gibt es eine Möglichkeit, per rsync nur Dateien eines bestimmten Benutzers zu synchronisieren? Ich habe einen Ordner, der Dateien mehrerer Benutzer enthält, möchte aber nur die Dateien eines bestimmten Benutzers sichern.

Ich habe mir die Manpages für rsync angesehen, aber es scheint kein solches Flag zu geben.

Irgendwelche Ideen?

Antwort1

Nein, es gibt keine Möglichkeit, die Dateien eines bestimmten Benutzers direkt über die rsync-Befehlszeile herauszufiltern.

Es ist jedoch sehr einfach, eine Liste dieser Dateien zu erstellen, beispielsweise mit einem Befehl wie

   find /src/directory -type f -exec ls -lh {} \; | awk '{if ($3 == "your_name") for (i=1; i<=NF-8; i++) $i = $(i+8); NF-=8; print}'

findfindet alle Dateien im Verzeichnisbaum unterhalb des Verzeichnisses /src/ und druckt eine lange Liste aus, die den Besitzer enthält. Diese Listen werden dann an übergeben awk, das diejenigen auswählt, die Ihnen gehören („Ihr_Name“) und dann nur für diese den vollständigen Pfad ausgibt. Die seltsame Konstruktion, die mit beginnt, forist auf die Tatsache zurückzuführen, dass einige der Dateinamen ein Leerzeichen enthalten können. Daher druckt diese Konstruktion alle Token ( i.e., alle durch Leerzeichen getrennten Zeichenfolgen) ab der 9. Spalte aus (Dateinamen können eine beliebige Anzahl von Leerzeichen enthalten). Außerdem stellt diese Konstruktion sicher, dass dies in einer einzigen Zeile bleibt.

Sie können diese Ausgabe in eine Datei umleiten und rsync dann nur auf die in dieser Datei aufgelisteten Dateien anwenden.

Antwort2

Die Antwort von MariusMatutiae hat bei mir nicht funktioniert: Ich habe dort -rw-r--r--nur Massen von Zeilen erhalten.

Also habe ich diese Antwort entwickelt:

  1. Der findBefehl hat die Option -user(und -group), die viel einfacher zu verwenden ist. Wir benötigen relative Pfad-/Dateinamen:
    a) findOption: -printf '%P\n'oder
    b) Pipe Throughsed -e "s#/path##"
  2. rsync bietet die Möglichkeit, aus Dateien zu synchronisieren: . Sie benötigen diese Datei lokal. Sie müssen also die Dateien per Push an rsync senden, oder der Server, der sie abruft, muss sie zuerst von der Remote-Seite abrufen, auf der die Liste zuvor generiert wurde.--files-from=FILE

=> Für mein Beispiel funktioniert das:
1a) find /usr/share/piwik/ -user www-data -printf '%P\n' > /tmp/find-piwik-rsync.listoder
1b)find /usr/share/piwik/ -user www-data | sed -e "s#/usr/share/piwik/##" > /tmp/find-piwik-rsync.list

2)rsync -a --files-from=/tmp/find-piwik-rsync.list /usr/share/piwik/ remote:/usr/share/piwik

-nSie sollten es zuerst mit / testen --dry-run.

verwandte Informationen