Em vez de pular aros para analisar ls, você poderia emular ls -l
com o comando GNU coreutils stat
, usando um formato de sua escolha. Se você colocar em camadas um shell bash para a opção globstar para listar recursivamente os arquivos e a opção dotglob para listar os arquivos de pontos, você poderá obter resultados bem razoáveis. Para os tempos de modificação do arquivo, escolhi usar %Y
, que é "segundos desde a época"; você pode usar %y
ou até mesmo passar o valor% Y para date
para reformatá-lo como quiser. Usar segundos-desde-o-epoch é uma maneira bastante flexível de permitir que o processador down-stream o exiba da maneira que desejar.
Para um arquivo simples:
$ stat -c "%A|%h|%U|%G|%s|%Y|%n" hosts.txt
-rw-r--r--|1|username|pgrp|135387|1202230643|hosts.txt
Para emular ls -alR
:
$ shopt -s globstar dotglob
$ stat -c "%A|%h|%U|%G|%s|%Y|%n" **
drwxr-xr-x|2|username|pgrp|4096|1510073497|.dotdir
-rw-r--r--|1|username|pgrp|0|1510073497|.dotdir/.dotfile
-rw-r--r--|1|username|pgrp|0|1507213776|f/test case
-rw-r--r--|1|username|pgrp|0|1507213776|f/test case.csv
-rw-r--r--|1|username|pgrp|135387|1202230643|hosts.txt
drwxr-xr-x|2|username|pgrp|4096|1510073307|space dir
-rw-r--r--|1|username|pgrp|0|1510073307|space dir/space file
-rwxr-xr-x|1|username|pgrp|112|1510073163|stat.sh
Embora isso possa ser menos portátil (para sistemas que não possuem coreutils / stat), ele tem a vantagem de ser flexível, imprimindo apenas os campos que lhe interessam e não corre o risco de substituir espaços em nomes de arquivos.