find … -exec rm {} \; provede rm příkaz pro každý soubor. I když je spuštění nového procesu poměrně rychlé, stále je mnohem pomalejší než pouhé smazání souboru.
find … -exec rm {} + zavolá rm v dávkách, což je mnohem rychlejší:platíte náklady na provoz rm jednou za dávku a každá dávka provede mnoho vymazání.
Ještě rychlejší je nevyvolávat rm vůbec. find příkaz v systému Linux má akci -delete pro smazání odpovídajícího souboru.
find ./cache -type f -mtime +0.5 -delete
Pokud však vytváříte soubory takovou rychlostí, že find … -exec rm {} \; nestíhám, pravděpodobně je něco špatně s vaším nastavením. Pokud cache obsahuje miliony souborů, měli byste jej rozdělit do podadresářů pro rychlejší přístup.
Zkuste použít xargs :
find ./cache -mtime +0.5 -print0 | xargs -0 rm -f
Vysvětlení aktualizace pro @pradeepchhetri
Pokud používáte find s -exec , každý soubor, který find nalezený zavolá rm jednou. Pokud jste tedy našli velké množství souborů, tj. 10 000 souborů, zavolali jste rm 10 000krát.
xargs bude zpracovávat výstup find jako argument příkazu na rm , takže xargs poskytne tolik argumentů jako rm zvládne najednou, tj. rm -f file1 file2 ... To znamená, že méně volání fork, program běží rychleji.