Jesteś na dobrej drodze (dla prostszego rozwiązania, uruchamiając tylko 2 lub 3 polecenia, patrz poniżej). Powinieneś użyć *
zamiast ./
pozbyć się bieżącego katalogu¹, a to nieco upraszcza wycinanie milisekund, a następnie po prostu przesłać wynik do GNU parallel
lub xargs
²:
find * -type d | cut -c 1-10 | parallel date --date=@{} +%c
dostać
Sat 12 Sep 2015 08:35:11 CEST
Sun 13 Sep 2015 10:50:11 CEST
Mon 14 Sep 2015 08:35:21 CEST
i aby dodać przesunięcie sekund przed tym, jak pokazuje przykład:
find * -type d | cut -c 1-10 | parallel 'echo "{} " $(date --date=@{} +%c)'
lub:
find * -type d | cut -c 1-10 | xargs -I{} bash -c 'echo "{} " $(date --date=@{} +%c)'
uzyskać:
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
Łatwiej jednak to zrobić:
find * -type d -printf "@%.10f\n" | date -f - +'%s %c'
co daje ci to samo żądane wyjście jeszcze raz.
Wadą używania *
jest to, że Twój wiersz poleceń ogranicza jego rozszerzenie, jednak zaletą jest sortowanie katalogów według wartości znacznika czasu. Jeśli liczba katalogów stanowi problem, użyj -mindepth 1
, ale stracisz kolejność:
find ./ -mindepth 1 -type d -printf "@%.10f\n" | date -f - +'%s %c'
i w sort
razie potrzeby wstaw :
find ./ -mindepth 1 -type d -printf "@%.10f\n" | sort | date -f - +'%s %c'
¹ Zakłada się, że nie ma zagnieżdżonych podkatalogów, jak wydaje się w przypadku twojego przykładu. Można również użyć ./ -mindepth 1
zamiast*
² można zastąpić parallel
z xargs -I{}
tutaj jako @hobbs i @don_crissti zasugerował, to po prostu bardziej gadatliwy.
³ na podstawie odpowiedzi Gillesa na wykorzystanie date
możliwości odczytu plików
Fri Oct 2 05:35:28 47592
)