Come eliminare tutti i file più vecchi di 3 giorni quando "Elenco argomenti troppo lungo"?


89

Ho una directory di file di registro che contiene 82000 file e directory (circa metà e metà).

Devo eliminare tutti i file e le directory più vecchi di 3 giorni.

In una directory che contiene 37000 file, sono stato in grado di farlo con:

find * -mtime +3 -exec rm {} \;

Ma con 82000 file / directory, ottengo l'errore:

/ usr / bin / find: elenco di argomenti troppo lungo

Come posso aggirare questo errore in modo da poter eliminare tutti i file / directory più vecchi di 3 giorni?


1
Hai provato find -mtime +3 -exec rm {} +?
Gilles Quenot

1
Credo che correre find * -mtime +3 |xargs rmrisolverebbe il problema.
Mats Petersson

9
Penso che l'unico problema sia find *. find .è meglio. La shell globing con si espande *in un enorme elenco di file e directory.
rumore senza arte

@artlessnoise è perfetto.
sjas

Risposte:


120

Per eliminare tutti i file e le directory all'interno della directory corrente :

find . -mtime +3 | xargs rm -Rf

O in alternativa, più in linea con il comando originale dell'OP:

find . -mtime +3 -exec rm -Rf -- {} \;

26
-1 Il problema è la stella in "trova *", lo hai risolto usando "trova". anziché. Xargs è fuorviante qui.
Aleksandr Levchuk

7
@AleksandrLevchuk risolve il problema degli OP e quindi non merita un voto negativo
hd1

11
Domanda: "trova * -mtime +3 -exec rm {} \;" restituisce un elenco di argomenti troppo lungo. Risposta: usa "find. -Mtime +3 -exec rm {} \;"
Aleksandr Levchuk

2
Potresti voler aggiungere --dopo rm, comefind . -mtime +3 -exec rm -- {} \;
domen

8
Nessuno ha detto a cosa --serve.
Acumenus

59

Può anche usare:

find . -mindepth 1 -mtime +3 -delete

Per non eliminare la directory di destinazione


4
Risposta migliore, molto più pulita rispetto alla chiamata a rm (e probabilmente più sicura). Funziona anche per le sottodirectory.
basic6

16

Un'altra soluzione per la domanda originale, esp. utile se vuoi rimuovere solo ALCUNI dei file più vecchi in una cartella, sarebbe simile a questo:

find . -name "*.sess" -mtime +100 

e così via .. Le virgolette bloccano i caratteri jolly della shell, permettendoti così di "trovare" milioni di file :)

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.