Listar o arquivo + o caminho do diretório recursivamente ordenado pelo tempo de acesso

3

Estou fazendo um script LRU, mas depois de 20 horas trabalhando nele, tenho um problema com o modo recursivo que não posso consertar.

Eu só preciso de um comando que me mostre os arquivos classificados pelo tempo de acesso (--time = atime); Eu quero gerenciar a profundidade também, mas se eu não posso, tudo bem também.

  • Diretório principal:
    • Arquivo 1
    • Diretório 1:
      • Arquivo 1
      • Arquivo2
      • Subdir 1:
        • file1
        • arquivo 2
    • Diretório 2:
      • Arquivo 1
      • Arquivo 2
      • Subdir 2:
        • arquivo 1
        • arquivo 2
        • subdir 3:
          • arquivo 1

Eu quero excluir o diretório, apenas tendo o arquivo classificado pelo tempo de acesso

como

/Main Directory/Directory 1/file 1

/Main Directory/File 1

/Main Directory/Directory 1/Subdir 1/file 2

/Main Directory/Directory 2/Subdir 2/subdir 3/file 1

etc..

    
por Meow 31.10.2016 / 12:23

2 respostas

3

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 formato YYYYMMDD 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ção noatime mount for usada ou se a opção relatime 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.

    
por 31.10.2016 / 16:01
3

O método mais fácil é usar zsh . Seus qualificadores de glob podem corresponder e classificar arquivos com base em seu tipo, registros de data e hora e outras propriedades.

print -lr -- *(.Doa)
print -lr -- **/*(.Doa)

O primeiro comando imprime os nomes dos arquivos regulares ( . ) no diretório atual, incluindo os arquivos de ponto ( D ) classificados pelo tempo de acesso ( oa ). O segundo comando lista arquivos no diretório atual e em seus subdiretórios recursivamente.

    
por 01.11.2016 / 00:35