Вы находитесь на правильном пути (для более простого решения, запустив только 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
возможности чтения файлов
Fri Oct 2 05:35:28 47592
)