it-swarm-eu.dev

Jak mohu rekurzivně smazat prázdné adresáře v domovském adresáři?

Možný duplikát:
Jak odstranit všechny prázdné adresáře v podstromu?

Adresáře vytvářím velmi často, roztroušené po domovském adresáři a je pro mě velmi obtížné je vyhledat a odstranit.

Chci, aby alias/funkce/skript našel/našel a odstranil všechny prázdné adresáře v domovském adresáři.

158
Santosh Kumar

Příkaz find je primárním nástrojem pro rekurzivní operace systému souborů. Použijte -type d výraz, který sdělí find máte zájem najít pouze adresáře (a ne obyčejné soubory). Verze GNU verze find podporuje -empty test, tak

$ find . -type d -empty -print

vytiskne všechny prázdné adresáře pod aktuálním adresářem.

Použijte find ~ -… nebo find "$HOME" -… založte vyhledávání na domovském adresáři (pokud to není váš aktuální adresář).

Po ověření, že se jedná o výběr správných adresářů, použijte -delete pro smazání všech zápasů:

$ find . -type d -empty -delete
310
Baldrick

Můžete volat rmdir v každém adresáři, protože rmdir smaže adresář pouze pokud je prázdný:

find "$HOME" -type d -exec rmdir {} + 2>/dev/null

Chcete-li také odebírat adresáře, které chcete odebrat, budete muset zkontrolovat, zda jsou prázdné:

find "$HOME" -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; files=("$1"/*); [[ ${files[@]} ]] || rmdir -v "$1"' -- {} \; 

Zde je čistě bash příklad (verze 4 nebo vyšší):

shopt -s globstar
for dir in **/; do
   files=("$dir"/*)
   [[ ${files[@]} ]] || rmdir -v "$dir"
done
15
jordanm