Obtém a última hora de mudança do diretório recursivamente

2

Como posso obter a última vez que qualquer um dos arquivos em um diretório ou em 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 Dir deve ser 10/1/1 ( File 1 foi o último modificado). Conseguir que o último nome de arquivo seja modificado é um bônus, mas não é necessário.

    
por Dani 28.05.2011 / 17:12

3 respostas

4

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

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

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

Vamos criar uma árvore de testes:

$ 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 tempo Unix na Wikipédia para obter uma explicação sobre "é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.

    
por 28.05.2011 / 17:43
0

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

FAR Manager (gratuito e de código aberto)
link

Veja como eu faço:

  • Navegue até o diretório que quero começar a pesquisar em
  • Pressione Alt-F7 (para exibir o diálogo Pesquisar)
  • Pesquise *.* (todos os arquivos)
  • Escolha "Painel" após a conclusão da pesquisa
  • Pressione F9, depois L e L novamente para exibir os detalhes completos da listagem de arquivos
  • Pressione CTRL-F5 para classificar tudo por data e hora de 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 (manter pressionada a tecla CTRL irá revelá-las na parte inferior da tela), e pressionar a mesma combinação novamente fará com que a classificação funcione na direção oposta (você pode alternar entre Crescente e Decrescente). desta maneira).

Embora o próprio diretório possa não ter o registro de data e hora mais recente, pelo menos você poderá encontrar o arquivo mais novo dessa forma e, em seguida, verá o caminho completo na listagem. Espero que isso ajude você a obter as informações necessárias?

    
por 28.05.2011 / 17:27
0

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

  • DIR / A / OD / S / TW

O comutador / TW é o mais interessante para você, porque significa "mostrar a última data escrita" (que é o mais próximo que encontrei com "DIR /?" para uma data de última modificação).

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 o switch / TW e ordenar 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 quiser incluir arquivos ocultos [e outros], omita essa opção.

    
por 28.05.2011 / 17:44