GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu rekurzivně odstranit všechny prázdné soubory a adresáře v Linuxu?

Toto je opravdu jednoduchá vložka:

find Parent -empty -delete

Je to docela samovysvětlující. I když při kontrole jsem byl překvapen, že úspěšně smaže Parent/Child1. Obvykle byste očekávali, že zpracuje rodiče před potomkem, pokud nezadáte -depth .

Toto funguje, protože -delete znamená -depth . Viz příručka GNU find:

-delete Vymazat soubory; true, pokud bylo odstranění úspěšné. Pokud se odstranění nezdařilo, zobrazí se chybová zpráva. Pokud -delete selže, bude návratový stav find nenulový (když nakonec skončí). Použití -delete automaticky zapne volbu -depth.

Všimněte si, že tyto funkce nejsou součástí Posix Standardu, ale s největší pravděpodobností tam budou v mnoha distribucích Linuxu. Můžete mít specifický problém s menšími, jako je Alpine Linux, protože jsou založeny na Busybox, který nepodporuje -empty .

Jiné systémy, které obsahují nestandardní -empty a -delete zahrnují BSD a OSX, ale zjevně ne AIX.


Zde je řešení se dvěma příkazy

Smažte prázdné soubory

find Parent/ -type f -size 0 -delete

Zkuste odstranit vše adresáře

find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>/dev/null

NB rmdir nemůže odstranit neprázdné adresáře, takže je bezpečný, ale způsobí chyby, které skrýváme

Jako výše, ale trochu konkrétnější ohledně ignorování chybových zpráv. Pokud se zpráva v různých distribucích liší, možná bude potřeba upravit.

find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>&1 \
  | grep -iv "Directory not empty$"

Můžete to udělat také pomocí fd nástroj:

fd -t e -x rm -r

https://github.com/sharkdp/fd


Linux
  1. Jak odstranit soubory a adresáře v Linuxu z příkazového řádku

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

  3. Najděte a odstraňte všechny adresáře s názvem test v linuxu

  1. Jak vyhledávat a odstraňovat adresáře rekurzivně v systému Linux

  2. Linux Odstraňte soubory a adresáře

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

  1. Jak rekurzivně vypsat všechny soubory a adresáře

  2. Jak mohu rekurzivně najít všechny soubory v aktuálních a podsložkách na základě shody zástupných znaků?

  3. Jak mohu vidět velikost souborů a adresářů v linuxu?