Freqüentemente uso o seguinte idioma para localizar todos os arquivos na árvore de arquivos iniciando o diretório atual e, em seguida, enviar os caminhos dos arquivos ls -lt
para que sejam mostrados os mais novos primeiro:
$ find * -type f -print0 | xargs -0 ls -lt | head -n 20
Fiquei surpreso ao ver que o arquivo mais recente estava faltando. Após algumas soluções de problemas, descobri que o motivo é que xargs
processa 322 itens por padrão e o arquivo mais recente não estava entre os primeiros 322 caminhos de arquivo.
Eu poderia investigar mais para ajustar o máximo de 322, mas como nem sempre saberei de quantos precisarei, procurei maneiras de ls
ler caminhos de arquivo de um arquivo de texto. Dessa forma, posso enviar os find
caminhos do arquivo ed para (digamos) ~/tmp/FilePaths.txt
e ls
lê-los a partir daí.
Existe uma maneira de fazer ls
isso? Existe um limite para quantos arquivos ele pode classificar cronologicamente para fins de ls -lt
? Especificamente, preciso que cada linha inteira seja ~/tmp/FilePaths.txt
interpretada como caminho de arquivo.
Haveria mais opções para conseguir isso se eu sed
adornasse cada linha com (digamos) aspas duplas para forçar a linha a ser interpretada como um único argumento, por exemplo ls $(cat ~/tmp/FilePaths)
,. No entanto, alguns nomes de arquivos conterão aspas duplas. Eu uso o Cygwin em um ambiente corporativo do Windows, então vale tudo no que diz respeito aos nomes de arquivos.
Pode ser mais fácil evitar o uso
ls
por completo.GNU
find
pode relatar a hora da última modificação e reportá-la em segundos de época. Isso facilita a classificação dos resultados.Então, por exemplo
O
%T@
tempo dos relatórios em segundos; o%t
relata em formato legível por humanos e%p
é o nome do caminho.Podemos então
sort
ehead
então obtemos