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.