Ви на правильному шляху (простіше рішення, виконуючи лише 2 або 3 команди, див. Нижче). Ви повинні використовувати *
замість./
щоб позбутися поточного каталогу¹, і це дещо спрощує скорочення мілісекунд, а потім просто передайте результат у GNU parallel
або xargs
²:
find * -type d | cut -c 1-10 | parallel date --date=@{} +%c
отримати
Sat 12 Sep 2015 08:35:11 CEST
Sun 13 Sep 2015 10:50:11 CEST
Mon 14 Sep 2015 08:35:21 CEST
і додати зміщення секунд перед цим, як ваш приклад вказує:
find * -type d | cut -c 1-10 | parallel 'echo "{} " $(date --date=@{} +%c)'
або:
find * -type d | cut -c 1-10 | xargs -I{} bash -c 'echo "{} " $(date --date=@{} +%c)'
отримати:
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
Однак зробити це простіше:
find * -type d -printf "@%.10f\n" | date -f - +'%s %c'
що ще раз отримує той самий запитуваний вихід.
Недоліком використання *
є те, що ви обмежені вашою командною лінією для її розширення, проте перевага полягає в тому, що ви отримуєте свої каталоги відсортовані за значенням часової мітки. Якщо кількість каталогів є проблемою використання -mindepth 1
, але втратите впорядкування:
find ./ -mindepth 1 -type d -printf "@%.10f\n" | date -f - +'%s %c'
і вставте, sort
якщо потрібно:
find ./ -mindepth 1 -type d -printf "@%.10f\n" | sort | date -f - +'%s %c'
¹ Це передбачає, що немає вкладених підкаталогів, як це здається у вашому прикладі. Ви можете також використовувати ./ -mindepth 1
замість*
² Ви можете замінити parallel
з xargs -I{}
тут @hobbs і @don_crissti запропонував, він просто більш багатослівним.
³ ґрунтується на відповіді Гілла щодо використання date
можливостей зчитування файлів s
Fri Oct 2 05:35:28 47592
)