GNU/Linux >> Znalost Linux >  >> Linux

Rychlejší způsob, jak odstranit velké množství souborů

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.


Linux
  1. N Snadný způsob, jak nahradit duplicitní soubory pevnými odkazy?

  2. Přeformátování velkého počtu souborů XML?

  3. Jak najít a odstranit prázdné adresáře a soubory v Unixu

  1. Odstraňte odpovídající soubory ve všech podadresářích

  2. Jak spočítat celkový počet řádků nalezených souborů?

  3. Najděte adresáře obsahující určitý počet souborů

  1. Jak zjistit počet souborů v adresáři a podadresářích

  2. Jak zkontrolovat velké soubory v konzole

  3. Rychlý způsob rekurzivního počítání souborů v linuxu