Como arquivo de lista por intervalo de data?

4

Eu gostaria de listar arquivos com 3 dias de idade. Eu encontrei este em stackoverflow :

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' ' | grep 2012

Mas eu não entendo o que todo o comando significa. Eu me pergunto se há algo curto e simples de entender.

    
por Valter Silva 04.03.2013 / 14:31

2 respostas

6

Isso deve funcionar

find . -type f -mtime -3

Explicação

find         find files
.            starting in the current directory (and it's subdirectories)
-type f      which are plain files (not directories, or devices etc)
-mtime -3    modified less than 3 days ago

Veja man find para detalhes

Atualizar

Para encontrar arquivos modificados pela última vez antes de uma data e hora específicas (por exemplo, 08:15 em 20 de fevereiro de 2013), você pode fazer algo como

  touch -t 201302200815 freds_accident
  find . -type f ! -newer freds_accident
  rm freds_accident

Veja man touch (ou info touch - ugh!)

Isso é moderadamente horrível e pode haver uma maneira melhor. A abordagem acima funciona em antigos e não-GNU Unix, assim como no Linux atual.

    
por 04.03.2013 / 14:41
0

Encontre intervalos de suporte com argumentos -ctime e -mtime +/-.

por exemplo,

$ for y in {07..14};do \
  for m in {01..12};do \
  for d in {01..30};do \
    touch -t 20$y$m${d}0101 $y$m$d.file ;done;done;done

$ find . -mtime +0 -mtime -$(( 3 * 365 + 3 )) |sort 
./100304.file
./100305.file
./100306.file
(...)
./130302.file
./130303.file
./130304.file

Se você quisesse arquivos criados no intervalo entre 3 anos e 3 dias atrás até uma semana atrás, você usaria -mtime +7 -mtime -1098.

    
por 05.03.2013 / 08:28