GNU/Linux >> Linux Esercitazione >  >> Linux

Script bash per eliminare file più vecchi di x giorni con sottodirectory

type opzione per filtrare i risultati

find accetta il type opzione per selezionare, ad esempio, solo i file.

find /path/to/files -type f -mtime +10 -delete

Tralascia -delete per mostrare cosa eliminerebbe e, una volta verificato, vai avanti ed esegui il comando completo.

Funzionerebbe solo su file, non su directory. Usa -type d per l'inverso, elenca solo le directory che corrispondono ai tuoi argomenti.

Opzioni aggiuntive

Potresti voler leggere man find , poiché ci sono altre opzioni di cui potresti aver bisogno in futuro. Ad esempio, -maxdepth ti consentirebbe di limitare gli elementi trovati solo a una profondità specifica, ad es. -maxdepth 0 non ricorrerebbe nelle sottodirectory.

Alcune osservazioni

  • Mi chiedo come il comando avrebbe rimosso una cartella, dal momento che non puoi rimuovere una cartella con rm solo. Avresti bisogno di rm -r per questo.

  • Inoltre, /path/to/files* è confuso. Intendevi /path/to/files/ o ti aspetti che il carattere jolly si espanda a diversi nomi di file e cartelle?

  • Inserisci {} tra virgolette singole, ad es. '{}' per evitare che il nome del file/directory sostituito venga interpretato dalla shell, proprio come proteggiamo il punto e virgola con una barra rovesciata.


Come nelle risposte precedenti (+1 per entrambe) il trucco è usare -type f predicato.

Nota che invece di -exec rm '{}' puoi anche usare -delete predicato. Ma non farlo. Con -exec rm '{}' puoi (e dovresti) prima fare -exec echo rm '{}' per verificare che questo sia davvero quello che vuoi. Successivamente, esegui nuovamente il comando senza echo .

Usando -delete è più veloce (nessun fork() aggiuntivo e execve() per ogni file), ma questo è rischioso perché -delete funziona anche come condizione, quindi:

# delete *.tmp files
find . -type f -name '*.tmp' -delete

ma se scambi SOLO gli argomenti:

# delete ALL files
find . -type f -name '*.tmp' -delete

Se mai avessi bisogno di find e rm per lavorare più velocemente con tonnellate di file, dai un'occhiata a find ... | xargs ... rm Linguaggio UNIX.


Linux
  1. Elimina tutti i file tranne che in una determinata sottodirectory con Trova?

  2. Come rimuovere file più vecchi di N giorni usando tmpreaper in Linux

  3. Come eliminare i file più vecchi di n giorni SENZA usare il comando trova

  4. Come trovare ed eliminare file più vecchi di un determinato periodo di tempo in Linux

  5. trova ed elimina file o cartelle più vecchi di x giorni

Come eliminare file più vecchi di giorni specificati in Linux

Elimina tutti i file tranne i 3 più recenti nello script bash

Elimina i file corrispondenti in tutte le sottodirectory

Trova directory con tutti i file all'interno più vecchi di X?

Trovare file più vecchi di x giorni su un sistema con un busybox ridotto

Cron job per eliminare tutti i file più vecchi di 7 giorni con estensione in una cartella specifica - non funzionante