Elenca tutti i file modificati di recente (ricorsivi)


21

Quindi, voglio visualizzare (tramite lsad esempio) tutti i file, che sono stati modificati negli ultimi sette giorni. Se mi trovo nella mia cartella docroot, dovrebbe essere in grado di sembrare "più profondo".

Per esempio:

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

Quindi, il ls(o qualunque cosa si adatti) dovrebbe essere prodotto myfile1e (se possibile) MySub/sub1.

È possibile con un solo comando?

Risposte:


39

Ovviamente. Dalla directory in cui ti trovi:

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

Aggiungi un reindirizzamento ad esso (ovvero > results.txtper archiviarli in quel file).

  • type f fa solo file e non directory
  • mtime -7 fa 7 giorni fa finora (+7 sarebbe "più vecchio di 7 giorni")
  • e quindi lo alimenta lsper mostrare un lungo elenco

Puoi anche giocare con la ls -lparte:

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

mostrerà un metodo ad albero con directory tra i file nell'elenco lungo (1) o nell'elenco breve (2).


4
findha lsun'opzione per cui potresti semplicemente farefind . -type f -mtime -7 -ls
heemayl

Certo, ma questo lo rende un po 'più generico (uso questo metodo per trovare i file di cui ho bisogno -remove- e posso cambiare quel comando per farlo :))
Rinzwind

3
Inoltre, è più appropriato utilizzare ciò find ... -exec ls -l {} +che viene eseguito in modo ls -lmolto più efficiente, meno volte con più parametri. Questa è un'opzione standard findspecificata da POSIX.
pabouk,

5

Con zsh:

ls -l **/*(.m-7)
  • **/* cercherà i file ricorsivamente a partire dalla directory corrente

  • (.m-7)è qualificatore glob dove .indica un file normale, m-7indica i file che sono stati modificati negli ultimi 7 giorni


2

Il seguente comando fa un sogno su Mac OSX - forse anche su Ubuntu ...

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

Questo trova i file nella struttura di directory corrente che sono stati modificati negli ultimi 7 giorni, genera la data di modifica + ora e percorso, ordinati per primi.

Esempio di output:

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

Sarei grato di qualsiasi feedback da parte degli utenti di Ubuntu.


L'unica soluzione che ha funzionato bene per me su Mac. Grazie!
artnikpro

Il tuo benvenuto @artnikpro!
MrWatson, il

1

Non esattamente quello che è stato chiesto ... ma molto più facile da ricordare ...

ls -alRt docroot

o

ls -alRt /path/to/top/level/directory

0

7 giorni che sono 60 secondi * 60 minuti * 24 ore * 7 giorni = 604800 secondi

Scopri la data corrente in secondi (tempo di epoca Unix):

$ date +%s
1448876323

Sottrai i 7 giorni in secondi:

expr $(date +%s) - 604800
1448271548

Ora prendi il statcomando e stampa le statistiche per tutti i file nel formato "nome + tempo in secondi" e usa awkper ritagliare quei file il cui tempo di modifica è maggiore di quella data che abbiamo calcolato

$ 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

Di particolare interesse sono gli ultimi 3 file, perché so che li stavo lavorando su meno di 7 giorni fa. Quindi so che funziona


2
Nota che invece di awk '$2 > 1448271265 {print $0}'te puoi dirlo direttamente awk '$2 > 1448271265'. In una condizione vera, awk stampa la riga corrente come azione predefinita.
fedorqui,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.