2013-11-27 12 views
19

Ho una directory con pochi TB di file. Vorrei eliminare tutti i file in esso che sono più vecchi di 14 giorni.trova file più vecchi di X giorni in bash e cancella

Ho pensato di utilizzare find . -mtime +13 -delete. Per assicurarsi che il comando funzioni come previsto, ho eseguito find . -mtime +13 -exec /bin/ls -lh '{}' \; | grep '<today>'. Quest'ultimo non dovrebbe restituire nulla, poiché i file che sono stati creati/modificati oggi non dovrebbero essere trovati da find utilizzando -mtime +13. Con mia sorpresa, tuttavia, lo find sputa solo un elenco di tutti i file modificati/creati oggi!

+0

Sei sicuro che tu o qualcun altro non hai modificato i file ?! –

+0

Vedere l'opzione '-daystart' per trovare. La tua scoperta conta esattamente 24 * 13 ore all'indietro, lasciando file che potrebbero essere 24 * 13 - 1 minuto e in seguito il tuo altro ritrovamento li troverà. –

+2

Appena capito! La ragione è "ls". 'find' trova una directory con mtime +13 e' ls' elenca semplicemente tutto il suo contenuto, indipendentemente dal tempo in cui i file hanno (facepalm!). – user3040975

risposta

24
find your/folder -type f -mtime +13 -exec rm {} \; 
+6

Non funziona per nomi file contenenti spazi. O (specifico per GNU) 'find -delete' o' find -print0 | xargs -0 rm' – grebneke

+4

@grebneke: puoi eseguire il backup della tua dichiarazione con esempi o fatti? 'find''s' {} 'è noto per essere sicuro riguardo agli spazi e ai simboli divertenti nei nomi dei file. –

+1

Funziona per nomi file con spazi per me redhat linux/bash. – gaoithe

5

Questo funziona per me.

$ find ./folder_name/* -type f -mtime +13 -print | xargs rm -rf 
+3

L'opzione '-r' è inutile. Inoltre, ti imbatterai in problemi se hai nomi di file contenenti spazi o altri simboli divertenti. Usa '-print0' e' xargs -0 ... 'se le tue utility li supportano, altrimenti usa la risposta di @ Mindx. Oppure, se il tuo 'find' lo supporta, usa il test' -delete' di 'find' così:' find ./folder_name -type f -mtime +13 -delete'. –

+4

Anche se questo snippet di codice può risolvere la domanda, [compresa una spiegazione] (http://meta.stackexchange.com/questions/114762/explaining-entally-code-based-answers) aiuta davvero a migliorare la qualità del post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. – gunr2171

Problemi correlati