Existem seis ferramentas muito usadas para resolver problemas semelhantes:
-
find
, para procurar arquivos ou diretórios que correspondam a entradas específicas.As opções
-mindepth
e-maxdepth
controlam a profundidade da árvore do sistema de arquivos (em relação aos nomes especificados, que estão sempre na profundidade 0) em que o comando funcionará.A opção
-type
é útil para restringir a consideração a arquivos, diretórios, links simbólicos ou dispositivos.A opção
-printf
é extremamente útil, pois faz com que o comando imprima as informações sobre os nomes correspondentes (itens de diretório) no formato desejado. Eu particularmente gosto de%TY%Tm%Td %TT %p\n
, que imprime a data e a hora da última modificação e o caminho completo e o nome de cada correspondência em cada linha, usando o formatoYYYYMMDD HH:MM:SS.sss PATH
. Este formato classifica corretamente, você vê. Para o último acesso, use%AY%Am%Ad %AT %p\n
, mas observe que os registros de data e hora de acesso não são gravados se a opçãonoatime
mount for usada ou se a opçãorelatime
mount for usada, os registros de horário de acesso serão modificados apenas para o primeiro acesso após uma modificação ; a verificação menos utilizada recentemente não é, portanto, confiável. (A lista menos modificada recentemente, no entanto, é bastante confiável; os usuários podem modificar os carimbos de data e hora manualmente, mas, por outro lado, eles são mantidos automaticamente.) -
sort
para ordenar a saída.As opções
-d
,-g
,-h
,-M
e-n
definem como os itens são comparados e a opção-R
torna a ordem aleatória.A opção
-r
pode ser usada para reverter a ordem de classificação (usada além de uma das opções acima).A opção
-t
redefine como os campos (colunas) são definidos; Por padrão, espaços em branco (espaços e tabulações) separam colunas.A opção
-k
pode ser usada para definir qual parte de cada linha é considerada a chave de classificação; por padrão, toda a linha é considerada. -
uniq
é usado com frequência após a classificação para combinar vários resultados consecutivos itens em um - de modo que somente as linhas exclusivas sejam produzidas. -
cut
é a maneira mais simples de escolher apenas colunas específicas de cada linha na saída.A opção
-f
escolhe os campos a serem impressos. (Por padrão, as linhas com no máximo um campo (sem separadores) são impressas; a opção-s
suprime a impressão dessas linhas.)A opção
-d
pode ser usada para redefinir a definição de um campo; Por padrão, os espaços em branco separam os campos. -
sed
é um poderoso editor de fluxo, que se aplica < Expressões regulares para a entrada, filtragem e modificação conforme necessário. -
awk
é um intérprete para a linguagem awk. Scripts Awk são basicamente coleções de ações , trechos de código, que são executados para cada linha (ou antes ou depois de todo o processamento, ou se a linha (ou registro) corresponder a alguma regra).
Esse problema específico pode ser resolvido usando três dos comandos acima em um pipeline simples: use find
para localizar arquivos nas profundidades desejadas da árvore, imprimindo uma data e hora classificáveis para cada arquivo, mais o caminho relativo para o arquivo; ordenar a saída; remova a parte de data e hora de cada linha, deixando apenas o caminho relativo para cada arquivo em cada linha.