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.