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.
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
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