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 ./
se livrar do diretório atual¹ e isso simplifica um pouco o corte dos milissegundos, em seguida, basta canalizar o resultado no 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 dos segundos antes disso, como indica o seu exemplo:
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 de fazer³:
find * -type d -printf "@%.10f\n" | date -f - +'%s %c'
que fornece a mesma saída solicitada mais uma vez.
A desvantagem do uso *
é que você está limitado pela linha de comando para sua expansão, mas a vantagem é que você classifica seus diretórios pelo valor do carimbo de data / hora. Se o número de diretórios for um problema -mindepth 1
, use , 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'
¹ Isso pressupõe que não haja 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.
³ com base na resposta de Gilles para usar date
os recursos de leitura de arquivos
Fri Oct 2 05:35:28 47592
)