Listar arquivo + caminho do diretório classificado recursivamente por tempo de acesso

Listar arquivo + caminho do diretório classificado recursivamente por tempo de acesso

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

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

  • Diretório principal:
    • Arquivo 1
    • Diretório 1:
      • Arquivo 1
      • Arquivo2
      • Subdiretório 1:
        • arquivo1
        • arquivo 2
    • Diretório 2:
      • Arquivo 1
      • Arquivo 2
      • Subdiretório 2:
        • arquivo 1
        • arquivo 2
        • subdiretório 3:
          • arquivo 1

Quero excluir o diretório, apenas ordenando o arquivo por tempo de acesso

como

/Diretório Principal/Diretório 1/arquivo 1

/Diretório Principal/Arquivo 1

/Diretório Principal/Diretório 1/Subdiretório 1/arquivo 2

/Diretório Principal/Diretório 2/Subdiretório 2/subdiretório 3/arquivo 1

etc..

Responder1

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 -mindepthe -maxdepthcontrolam a profundidade na árvore do sistema de arquivos (em relação aos nomes especificados, que estão sempre na profundidade 0) em que o comando funcionará.

    A -typeopção é útil para restringir a consideração de arquivos, diretórios, links simbólicos ou dispositivos.

    A -printfopção é extremamente útil, pois faz com que o comando imprima as informações dos nomes correspondentes (itens de diretório) no formato desejado. Gosto particularmente do %TY%Tm%Td %TT %p\n, que imprime a data e hora da última modificação, e caminho completo e nome de cada correspondência em cada linha, usando format YYYYMMDD HH:MM:SS.sss PATH. Este formato é classificado corretamente, você vê. Para o último acesso, use %AY%Am%Ad %AT %p\n, mas observe que os carimbos de data e hora de acesso não serão registrados se noatimea opção de montagem for usada, ou se relatimea opção de montagem for usada, os carimbos de data e hora de acesso serão modificados apenas para o primeiro acesso após uma modificação; a verificação usada menos 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, caso contrário, eles serão mantidos automaticamente.)

  • sortpara classificar a saída.

    As opções -d, -g, -h, -Me -ndefinem como os itens são comparados e a -Ropção torna o pedido aleatório.

    A -ropção pode ser usada para reverter a ordem de classificação (usada além de uma das opções acima).

    A -topção redefine como os campos (colunas) são definidos; por padrão, espaços em branco (espaços e tabulações) separam colunas.

    A -kopção pode ser utilizada para definir qual parte de cada linha é considerada a chave de classificação; por padrão, toda a linha é considerada.

  • uniqé frequentemente usado após a classificação para combinar vários itens consecutivos em um - para que apenas as linhas exclusivas sejam geradas.

  • cuté a maneira mais simples de escolher apenas colunas específicas de cada linha da saída.

    A -fopção escolhe os campos a serem impressos. (Por padrão, são impressas linhas com no máximo um campo (sem separadores); a opção -ssuprime a impressão de tais linhas.)

    A -dopção pode ser utilizada para redefinir a definição de um campo; por padrão, os campos separados ficam em branco.

  • sedé um poderoso editor de stream, que se aplicaexpressões regularesà entrada, filtrando e modificando-a conforme necessário.

  • awké um intérprete para a linguagem awk. Os scripts Awk são basicamente coleções deaçõ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).

Este problema específico pode ser resolvido usando três dos comandos acima em um pipeline simples: use findpara localizar arquivos nas profundidades desejadas da árvore, imprimindo uma data e hora classificáveis ​​para cada arquivo, além do caminho relativo para o arquivo; classifique a saída; remova a parte de data e hora de cada linha, deixando apenas o caminho relativo para cada arquivo em cada linha.

Responder2

De longe, o método mais fácil é usarzsh. Isso éeliminatórias globaispode combinar e classificar arquivos com base em seu tipo, carimbos 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 arquivos de ponto ( D) classificados por tempo de acesso ( oa). O segundo comando lista os arquivos no diretório atual e em seus subdiretórios recursivamente.

informação relacionada