Sie sind auf dem richtigen Weg (für eine einfachere Lösung, die nur 2 oder 3 Befehle ausführt, siehe unten). Sie sollten *
statt verwenden ./
, um das aktuelle Verzeichnis loszuwerden¹ und dies vereinfacht das Schneiden der Millisekunden etwas, dann leiten Sie das Ergebnis einfach in GNU parallel
oder xargs
²:
find * -type d | cut -c 1-10 | parallel date --date=@{} +%c
bekommen
Sat 12 Sep 2015 08:35:11 CEST
Sun 13 Sep 2015 10:50:11 CEST
Mon 14 Sep 2015 08:35:21 CEST
und um den Sekundenversatz davor zu addieren, wie Ihr Beispiel zeigt:
find * -type d | cut -c 1-10 | parallel 'echo "{} " $(date --date=@{} +%c)'
oder:
find * -type d | cut -c 1-10 | xargs -I{} bash -c 'echo "{} " $(date --date=@{} +%c)'
bekommen:
1442039711 Sat 12 Sep 2015 08:35:11 CEST
1442134211 Sun 13 Sep 2015 10:50:11 CEST
1442212521 Mon 14 Sep 2015 08:35:21 CEST
Es ist jedoch einfacher zu tun³:
find * -type d -printf "@%.10f\n" | date -f - +'%s %c'
Dadurch erhalten Sie erneut die gleiche angeforderte Ausgabe.
Der Nachteil bei der Verwendung *
ist, dass Sie für die Erweiterung auf Ihre Befehlszeile beschränkt sind. Der Vorteil ist jedoch, dass Sie Ihre Verzeichnisse nach dem Zeitstempelwert sortiert bekommen. Wenn die Anzahl der Verzeichnisse ein Problem ist, verwenden Sie -mindepth 1
, aber verlieren Sie die Reihenfolge:
find ./ -mindepth 1 -type d -printf "@%.10f\n" | date -f - +'%s %c'
und sort
bei Bedarf einfügen :
find ./ -mindepth 1 -type d -printf "@%.10f\n" | sort | date -f - +'%s %c'
¹ Dies setzt voraus, dass keine verschachtelten Unterverzeichnisse vorhanden sind, wie dies in Ihrem Beispiel der Fall zu sein scheint. Sie können auch verwenden , ./ -mindepth 1
statt*
² Sie können ersetzen parallel
mit xargs -I{}
hier als @hobbs und @don_crissti vorgeschlagen, es ist nur ausführlicher.
³ basierend auf der Antwort von Gilles zur Verwendung der date
Dateilesefunktionen
Fri Oct 2 05:35:28 47592
)