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
rmsolo. Avresti bisogno dirm -rper 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.