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.