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 dirm -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.