Você está no caminho certo (para uma solução mais simples, executando apenas 2 ou 3 comandos, veja abaixo). Você deve usar *
em vez de ./
para se livrar do diretório atual¹ e isso simplifica um pouco o milésimo de segundo, então canalize o resultado para GNU parallel
ou xargs
²:
find * -type d | cut -c 1-10 | parallel date --date=@{} +%c
para obter
Sat 12 Sep 2015 08:35:11 CEST
Sun 13 Sep 2015 10:50:11 CEST
Mon 14 Sep 2015 08:35:21 CEST
e para adicionar o deslocamento de segundos antes disso, conforme o exemplo indica:
find * -type d | cut -c 1-10 | parallel 'echo "{} " $(date --date=@{} +%c)'
ou:
find * -type d | cut -c 1-10 | xargs -I{} bash -c 'echo "{} " $(date --date=@{} +%c)'
para obter:
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
No entanto, é mais simples fazer³:
find * -type d -printf "@%.10f\n" | date -f - +'%s %c'
que lhe dá a mesma saída solicitada mais uma vez.
A desvantagem de usar *
é que você está limitado pela sua linha de comando para sua expansão, mas a vantagem é que você obtém seus diretórios classificados por valor de registro de data e hora. Se o número de diretórios for um problema, use -mindepth 1
, mas perca a ordem:
find ./ -mindepth 1 -type d -printf "@%.10f\n" | date -f - +'%s %c'
e insira sort
, se necessário:
find ./ -mindepth 1 -type d -printf "@%.10f\n" | sort | date -f - +'%s %c'
¹ Isto assume que não há subdiretórios aninhados, como parece ser o caso do seu exemplo. Você também pode usar ./ -mindepth 1
em vez de *
² Você pode substituir parallel
com xargs -I{}
aqui como @hobbs e @don_crissti sugeriu, apenas mais detalhado.
³ baseado na resposta de Gilles para usar os recursos de leitura de arquivos date
s