GNU/Linux >> LINUX-Kenntnisse >  >> Linux

rsync N neueste Dateien in einem Verzeichnis

Der einfachste Weg ist, zsh statt bash auszuführen.

rsync -a -- /path/to/directory/*(om[1,42]) remote-server:

In Klammern om ordnet Dateien nach umgekehrter Änderungszeit (d. h. nach zunehmendem Alter) und [1,42] wählt die ersten 42 Treffer aus.

Wenn Sie nur normale Dateien und keine Verzeichnisse möchten, fügen Sie . hinzu nach der öffnenden Klammer. Weitere Möglichkeiten finden Sie unter „Glob Qualifiers“ in zshexpn Manpage.

Wenn Sie Dateien im Verzeichnisbaum abgleichen möchten, der unter /path/to/directory verwurzelt ist , anstatt nur innerhalb dieses Verzeichnisses, verwenden Sie /path/to/directory/**/*(.om[1,42]) . Dadurch werden jedoch alle Dateien in dasselbe Verzeichnis auf dem Ziel gesendet.


Angenommen, Sie möchten Dateien aus dem aktuellen Arbeitsverzeichnis senden:

rsync `ls -tp | grep -v / | head -n <n>` <destination> <options>

wird den Trick machen. Zum Beispiel:

rsync `ls -tp | grep -v / | head -n 10` [email protected]:/dest/dir/ --progress --compress

Dies gibt einen Fehler aus, wenn im aktuellen Arbeitsverzeichnis keine Dateien zu finden sind oder wenn eine der obersten Dateien Leerzeichen oder andere Sonderzeichen enthält.

Die `-Zeichen um ls -tp | grep -v / | head -n <n> weist bash an, die Befehle auszuführen, und ersetzt sie durch die resultierende Dateiliste als eine durch Leerzeichen getrennte Liste. Die -t Option sagt ls um nach Zeitstempel zu sortieren, der -p weist es an, einen / hinzuzufügen nach Verzeichnisnamen und dem grep-Teil werden Zeilen mit der Endung / ausgeblendet Sie müssen also keine Verzeichnisse rüberschicken. Fügen Sie -c hinzu zum ls Optionen, wenn Sie möchten, dass die neuesten Dateien nach der Erstellungszeit statt nach der Änderungszeit beurteilt werden (beachten Sie jedoch, dass einige Programme Dateien entfernen und ersetzen, anstatt sie zu aktualisieren, sodass ctime und mtime gleich sein können, obwohl eine Datei anscheinend schon länger vorhanden ist ).

Ich behaupte nicht, dass es zweifellos das einfachste ist Weg, aber es wäre der Weg, an den ich zuerst denken würde.

(mwms Unterfrage-in-einem-Kommentar)

wie ist das andersherum? Server auf lokal?

Das wäre etwas komplexer, da Sie meiner Meinung nach nicht mehrere Remote-Dateiquellen in der rsync-Befehlszeile haben können, wie Sie es bei lokalen tun können. Sie könnten rsync ausführen auf dem Server über ssh , wodurch ein Tunnel zurück zu Ihrem lokalen sshd geöffnet wird (mit demselben ssh Aufruf, durch den Sie rsync laufen lassen), um die Verbindung zu erhalten, im Wesentlichen denselben Befehl von der anderen Seite verwendet.


Linux
  1. Linux – Große Verzeichnisse mit Tausenden von Dateien effizient löschen?

  2. Cat-Dateien mit Verzeichnis?

  3. Erste N Dateien in ein anderes Verzeichnis kopieren?

  4. Sichern Sie Ihre Dateien mit rsync

  5. Entpacken Sie alle Dateien in einem Verzeichnis

So zählen Sie Dateien im Verzeichnis in Linux

Rsync-Beispiele zum Übertragen von Dateien unter Linux

So verwenden Sie Rsync

So zählen Sie Dateien im Verzeichnis unter Linux

Zählen Sie die Anzahl der Dateien in einem Verzeichnis in Linux

Linux rsync-Befehlsbeispiele