Angenommen, ich habe ein Verzeichnis mit einer Reihe von Dateien wie g.txt, in dem g.txt zuletzt am 20. Juni 2012 geändert wurde.
Wie würde ich alle Dateien (wie g.txt) mit dem letzten Änderungsdatum vom 20. Juni 2012, das am Ende angehängt wurde, stapelweise umbenennen?
date
Implementierung ist das? Meine GNUdate
scheint nicht mit Eingaben umzugehen.hier ist eine version von goldschrafe's one-liner, die:
Bewältigt auch Dateinamen, die mit einem Bindestrich beginnen
for f in *; do mv -- "$f" "$f-$(date -r "$f" +%Y%m%d)"; done
quelle
date -r "$f" +%Y%m%d
oder es wird nicht funktionieren, wennPOSIXLY_CORRECT
es in der Umgebung ist. Im Allgemeinen sollten Optionen vor anderen Argumenten stehen."${f}"
.Obligatorischer zsh-Einzeiler (einmaliges Laden optionaler Komponenten nicht eingerechnet):
Wir verwenden das
stat
eingebautezsh/stat
Modul und diezmv
Funktion, um Dateien umzubenennen. Und hier ist ein Extra, das das Datum, falls vorhanden, vor die Verlängerung setzt.quelle
Wie ich verstanden habe, wissen wir nicht im Voraus, was das Änderungsdatum ist. Also müssen wir es aus jeder Datei holen, die Ausgabe formatieren und jede Datei so umbenennen, dass das Änderungsdatum in den Dateinamen enthalten ist.
Sie können dieses Skript als "modif_date.sh" speichern und ausführbar machen. Wir rufen es mit dem Zielverzeichnis als Argument auf:
modif_date.sh txt_collection
Wobei "txt_collection" der Name des Verzeichnisses ist, in dem sich alle Dateien befinden, die umbenannt werden sollen.
quelle
stat
oder gar kein Dienstprogramm haben .ls
nicht zuverlässig ist . Bei einigen Unix-Varianten können Benutzer- und Gruppennamen Leerzeichen enthalten, wodurch die Ausrichtung der Datumsspalten beeinträchtigt wird.ls
als Datum und Uhrzeit angezeigt wird (statt als Datum und Jahr), im aktuellen Jahr liegen muss. Das ist nicht wahr. Es ist in den letzten sechs Monaten; Dies könnte im Vorjahr liegen (z. B. vom 27. September 2016 bis zum 31. Dezember 2016 in den letzten sechs Monaten). (6) Auf die Gefahr hin, Gregs Wiki (das @Gilles bereits zitiert hat) zu parrotieren, können Dateinamen, die Zeilenumbrüche und Leerzeichen enthalten, dazu führen, dass dies fehlschlägt. … (Fortsetzung)Hier ist eine Version von Cas 'One-Liner (basierend auf Goldschrafe's Oneliner), die mit Idempotenz erweitert wurde.
dh erweitert, um Dateien mit Datums- und Uhrzeitpräfix zu versehen und dies nur für diejenigen, die noch kein Datums- und Uhrzeitpräfix haben .
Anwendungsfall: hilfreich, wenn Sie dem Verzeichnis neue Dateien hinzufügen und denen, die noch keine haben, ein Datums- / Uhrzeitpräfix hinzufügen möchten.
quelle
for f in *.jpg ; do jhead -ft "$f" ; done
Quelle: unix.stackexchange.com/a/290755/9689