Você não precisa desse ls -tr
extra. Isso é equivalente ao seu comando e mais rápido:
find . -type f | xargs stat --printf="%y %n\n" | sort -n
Algo como isso excluirá um subdiretório de arquivos:
find . -type f ! -path './directory/to/ignore/*' \
| xargs stat --printf="%y %n\n" \
| sort -n
Isso ainda verificará todos os arquivos, se você quiser ignorar um subdiretório inteiro, use -prune
. Você terá que reordenar as coisas um pouco para que não encontremos todos os arquivos primeiro.
find . -path './directory/to/ignore' -prune -o -type f -print0 \
| xargs -0 stat --printf="%y %n\n" \
| sort -n
E no interesse de ser o mais eficiente possível, o stat
foi redundante, já que o find já está acessando o arquivo. Então você está realmente atingindo o sistema de arquivos 2X com a abordagem find ... | stat ...
, então aqui está um método mais eficiente que tem find
fazendo todo o trabalho.
find . -path './directory/to/ignore' -prune -o -printf '%t %p\n'
| sort -n
Para fazer essa versão funcionar, tive que adaptar as diretivas printf, pois stat
e find
usam diferentes para os vários metadados do sistema de arquivos.