Linux: usando find para localizar arquivos mais antigos que a data

27

find tem um bom suporte para encontrar arquivos mais modificados há menos de X dias, mas como posso usar find para localizar todos os arquivos modificados após uma determinada data?

Não consigo encontrar nada na página find man para fazer isso, apenas para comparar com o tempo de outro arquivo ou para verificar as diferenças entre o tempo criado e agora. Está fazendo um arquivo com o tempo desejado e comparando com isso a única maneira de fazer isso?

    
por DrStalker 16.03.2010 / 05:22

7 respostas

16

Se você tiver apenas '-newer file', poderá usar esta solução alternativa:

touch -t 201003160120 some_file
find . -newer some_file

toque de homem:

  -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

Supondo que o seu toque tenha essa opção (o meu é o touch 5.97).

    
por 16.03.2010 / 09:13
41

Não, você pode usar uma string de data / hora.

De man find :

-newerXY reference
Compares the timestamp of the current file with reference. The reference argument is normally the name of a file (and one of its timestamps is used for the comparison) but it may also be a string describing an absolute time. X and Y are placeholders for other letters, and these letters select which time belonging to how reference is used for the comparison.

          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time

Exemplo:

find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls
    
por 16.03.2010 / 05:52
23

Não está diretamente relacionado à pergunta, mas pode ser interessante para alguns que tropeçam aqui.

O comando

find não suporta diretamente o parâmetro -older para localizar arquivos mais antigos que algumas datas exigidas, mas você pode usar a instrução negate (usando o exemplo de resposta aceito):

touch -t 201003160120 some_file
find . ! -newer some_file

retornará arquivos mais antigos que a data fornecida.

    
por 06.09.2012 / 14:17
9
find <dir> -mtime -20

este comando find encontrará arquivos modificados nos últimos 20 dias.

  • mtime - > modificado (atime = acessado, ctime = criado)
  • -20 - > menos de 20 dias de idade (20 exatamente 20 dias, +20 mais de 20 dias)

Você pode adicionar outras limitações como:

find <dir> -mtime -20 -name "*.txt"

igual a antes, mas só encontra arquivos terminados em '.txt'.

    
por 16.03.2010 / 13:13
4

Apenas para adicionar - você pode até usar dois argumentos newermt para pesquisar em um intervalo de tempo:

find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls

para encontrar todos os arquivos a partir de março de 2007.

    
por 30.12.2013 / 22:48
1

Você poderia usar um script como este

#!/bin/bash

if [ $# -ne 1 ];then
  when="today"
else
  when=' date -d "$1" +"%s" '
fi
now='date +"%s"'

seconds='echo "$when - $now" | bc'
minutes='echo "$seconds / 60 " | bc '

find . -cmin $minutes -print

Salve em $ PATH como "newerthan" e torne-o executável.

Em seguida, você pode encontrar o arquivo modificado após uma determinada data como esta:

newerthan "2010-03-10"

ou

newerthan "last year"

ou

newerthan "yesterday"

Isso deve fazer o que você quiser. Eu não acho que haja uma maneira embutida de conseguir isso de outra maneira.

    
por 16.03.2010 / 09:29
0

se a sua data estiver formatada de modo que seja aceitável para comparação,

mydate=201003160120
find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'
    
por 16.03.2010 / 11:23