Obter o horário da última alteração do diretório recursivamente

2

Como posso obter a última vez que um dos arquivos em um diretório ou seus subdiretórios foi alterado? por exemplo

Dir - changed 1/1/1
    Sub Dir 1 - changed 2/1/1
        Sub Dir 2 - changed 3/1/1
            File 1 - changed 10/1/1
    File 2 - change 5/1/1

A saída para isso para Dirdeve ser 10/1/1 ( File 1foi a última modificação). Obter o último nome de arquivo a ser modificado é um bônus, mas não é necessário.

Dani
fonte

Respostas:

4

find <dir> -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 retorna uma linha no formato:

<seconds since epoch[1]><tab><filename>

Alias ​​ou insira um script como no exemplo a seguir para imprimir o nome ou a data do arquivo.


Vamos criar uma árvore de teste:

$ date -u; mkdir -p a/{b,c,d}/{e,f,g}
Sat May 28 17:37:52 UTC 2011

$ date -u; touch a/{b,c,d}/{e,f,g}/{foo,bar,baz}; sleep 1; date -u; touch a/c/f/bar
Sat May 28 17:38:17 UTC 2011
Sat May 28 17:38:18 UTC 2011

Obter data de a:

$ date -ud @$(find a -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f1)
Sat May 28 17:38:18 UTC 2011

Obtenha o caminho do arquivo:

$ find a -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f2
a/c/f/bar

[1]: Veja a hora do Unix na Wikipedia para obter uma explicação da "época do Unix".


Exemplo de script:

#!/bin/sh
if test ! -d "${1:-.}"
then
    echo not a directory: ${1:-.} >&2
    exit 1
fi
date -d @$(find "${1:-.}" -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f1)

Ligue com ou sem <dir>como argumento. Ele usará o diretório atual sem.

peth
fonte
... e em zshvocê pode fazer ls -l <dir>/**/*(.om[1]).
peth
0

Eu uso o FAR Manager para fazer algo semelhante a isso que deve resolver seu problema:

  FAR Manager (de código aberto e gratuito)
  http://www.farmanager.com/

Aqui está como eu faço:

  • Navegue para o diretório do qual quero começar a pesquisar
  • Pressione Alt-F7 (para abrir a caixa de diálogo Pesquisar)
  • Procurar por *.*(todos os arquivos)
  • Escolha "Painel" após a conclusão da pesquisa
  • Pressione F9 e L e L novamente para mostrar os detalhes completos da lista de arquivos
  • Pressione CTRL-F5 para classificar tudo por carimbo de data / hora da modificação

O "Painel" coloca todos os resultados da pesquisa em uma longa lista classificável. Você também tem outras opções de classificação (pressionar a tecla CTRL as revelará na parte inferior da tela) e pressionar a mesma combinação de teclas de classificação novamente fará com que a classificação funcione na direção oposta (você pode alternar entre Ascendente e Descendente deste jeito).

Embora o diretório em si possa não ter o carimbo de data / hora mais recente, pelo menos você poderá encontrar o arquivo mais recente dessa maneira e verá o caminho completo na lista. Espero que isso ajude você a obter as informações necessárias?

insira a descrição da imagem aqui

Randolf Richardson
fonte
Agradecemos a @peth por salientar que se trata do Linux. Se o FAR Manager não funcionar no Linux para você, sempre há o Midnight Commander que, acredito, deve fornecer funcionalidade semelhante, pois é, como o FAR Manager, também inspirado no Norton Commander.
Randolf Richardson 28/05
0

No DOS, este comando pode funcionar para você, embora não perfeitamente devido a limitações inerentes ao comando DIR do DOS:

  • DIR / A / OD / S / TW

A opção / TW é a mais interessante para você, porque significa "mostrar a última data gravada" (que é o mais próximo que pude encontrar com "DIR /?" Para uma data modificada pela última vez).

A opção / OD faz com que a saída seja classificada por data. O comando DIR deve captar o fato de que você está usando a opção / TW e classificar por essa data automaticamente.

A opção / S permite pesquisar recursivamente em subdiretórios.

A opção / A inclui todos os tipos de arquivos, incluindo arquivos ocultos. Se você não deseja incluir arquivos ocultos [e outros], omita essa opção.

Randolf Richardson
fonte
@peth: Opa! Perdi a etiqueta (gostaria de saber se ela foi adicionada mais tarde?), E a palavra "Dir" me jogou na pista do DOS.
Randolf Richardson 28/05