Listar todos os arquivos recentemente alterados (recursivos)

14

Então, eu quero mostrar (via ls , por exemplo) todos os arquivos, que foram alterados nos últimos sete dias. Se eu estiver na minha pasta docroot, deve ser capaz de olhar "mais fundo".

Por exemplo:

File        Last changed
docroot
|- myfile1  30.11.2015
|- myfile2  10.11.2015
|- MySub
   |-sub1   30.11.2015
   |-sub2   10.11.2015

Portanto, o ls (ou qualquer outro ajuste) deve produzir myfile1 e (se possível) MySub/sub1 .

Isso é possível com um comando?

    
por DasSaffe 30.11.2015 / 10:17

5 respostas

26

Claro. Do diretório em que você está:

find . -type f -mtime -7 -exec ls -l {} \; 

Adicione um redirecionamento a ele (também conhecido como > results.txt para armazená-los nesse arquivo).

  • type f faz apenas arquivos e não diretórios
  • mtime -7 faz 7 dias até agora (+7 seria 'mais antigo que 7 dias')
  • e, em seguida, alimenta-o para ls para mostrar uma lista longa

Você também pode reproduzir com a parte ls -l :

find . -type f -mtime -7 -exec ls -Rl --time-style=long-iso {} \; 
find . -type f -mtime -7 -exec ls -R  --time-style=long-iso {} \; 

mostrará um método de árvore com diretórios entre os arquivos em lista longa (1) ou lista curta (2).

    
por Rinzwind 30.11.2015 / 10:22
5

com zsh :

ls -l **/*(.m-7)
  • **/* procurará arquivos recursivamente a partir do diretório atual

  • (.m-7) é qualificador glob, em que . indica o arquivo normal, m-7 indica arquivos que foram modificados nos últimos sete dias

por heemayl 30.11.2015 / 10:31
1

Não exatamente o que foi pedido ... mas muito mais fácil de lembrar ...

ls -alRt docroot

ou

ls -alRt /path/to/top/level/directory
    
por heynnema 11.02.2016 / 02:06
0

7 dias que são 60 segundos * 60 minutos * 24 horas * 7 dias  = 604800 segundos

Descubra a data atual em segundos (hora da época do Unix):

$ date +%s
1448876323

Subtraia os 7 dias em segundos:

expr $(date +%s) - 604800
1448271548

Agora, use o comando stat e imprima as estatísticas de todos os arquivos no formato "nome + tempo em segundos" e use awk para cortar os arquivos cuja hora de modificação é maior que aquela data que calculamos

$ stat --printf="%n %Y\n" $HOME/* | awk '$2 > 1448271265 {print $0}'
/home/xieerqi/1448428697574.png 1448429613
/home/xieerqi/1448763343273.png 1448763478
/home/xieerqi/1510DRIVE 1448352453
/home/xieerqi/addRemoveDistribution 1448666843
/home/xieerqi/add-update.awk 1448716356
/home/xieerqi/add-update.sh 1448625092

Particularmente de interesse são os últimos 3 arquivos, porque eu sei que eu estava trabalhando em menos de 7 dias atrás. Assim eu sei que funciona

    
por Sergiy Kolodyazhnyy 30.11.2015 / 10:41
0

O comando a seguir funciona como um sonho no Mac OSX - talvez também no Ubuntu…

find . -type f -mtime -7 -exec stat -lt "%Y-%m-%d %H:%M:%S" {} \; | cut -d\  -f6- | sort -r

Isso encontra arquivos na árvore de diretórios atual que foram modificados nos últimos 7 dias, gera a data de modificação + hora e caminho, classificados mais novos primeiro.

Exemplo de saída:

2018-02-21 22:06:30 ./fmxmlsnippet.xml
2018-02-19 12:56:01 ./diff.html
2018-02-19 12:44:37 ./temp/iDDR/XMSC_fmxmlsnippet.xml
2018-02-18 22:04:05 ./temp/iDDR/XMFD_fmxmlsnippet.xml
2018-02-15 10:18:27 ./xml/iDDR/XML2_fmxmlsnippet.xml
2018-02-15 10:13:29 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout.xsl
2018-02-15 10:11:36 ./xsl/.DS_Store
2018-02-15 10:10:51 ./xsl/_inc/inc.XML2_fmCM_ReportReferencesToExternalFiles.xsl
2018-02-15 10:10:09 ./xsl/_inc/.DS_Store
2018-02-15 10:07:35 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout-NoAnchors.xsl
2018-02-15 10:07:35 ./xsl/_inc/inc.XML2_fmCM_AnalyseLayout.xsl

Eu ficaria grato por qualquer feedback dos usuários do Ubuntu.

    
por MrWatson 21.02.2018 / 22:53