In zsh ist die neueste Datei im aktuellen Verzeichnis
a=(*(om[1]))
latest_file=$a[1]
cp -p $latest_file /other/directory
( Glob-Qualifikatoren rocken, aber leider ist das Ergebnis immer noch eine Liste, selbst wenn Sie nur ein Element anfordern, daher das temporäre Array a
.)
In anderen Shells können Sie Folgendes verwenden, wenn Sie wissen, dass Ihre Dateinamen keine Zeilenumbrüche oder nicht druckbaren Zeichen enthalten dürfen ls
:
latest_file=$(ls -t | head -n 1)
cp -p "$latest_file" /other/directory
Es scheint jedoch, dass Sie wirklich nach der Liste der Dateien fragen, die neuer als eine bestimmte Datei sind. Zu diesem -cnewer
Zweck können Sie das integrierte von verwenden find
, um Dateien zu erkennen, deren Inhalt oder Metadaten sich in letzter Zeit geändert haben als einige andere Dateien. Beachten Sie, dass die Art und Weise, wie ich es hier aufrufe, find
auch Dateien in Unterverzeichnissen sammelt.
find . -cnewer "$previous_latest_files" -exec sh -c 'cp -p "$@" "$0"' /other/directory {} +
Das Problem besteht weiterhin darin, die letzte Datei zu erkennen. Entscheidend ist das Datum der Kopie. Erstellen Sie also beim Kopieren eine Markierungsdatei.
find . -cnewer marker_file -exec sh -c 'cp -p "$@" "$0"' /other/directory {} +
touch marker_file
Wenn die Dateien im Zielverzeichnis verbleiben, können Sie die beiden Verzeichnisse einfach synchronisieren. Beachten Sie, dass wenn Sie einige alte Dateien aus dem Zielverzeichnis löschen, diese jedoch im Quellverzeichnis verbleiben, diese mit dieser Methode erneut kopiert werden.
rsync -a . /other/directory/