desenv-web-rp.com

como posso excluir recursivamente diretórios vazios no meu diretório pessoal?

Possível duplicado:
Como remover todos os diretórios vazios de uma subárvore?

Crio diretórios com muita frequência, espalhados pelo meu diretório pessoal, e acho muito difícil localizá-los e excluí-los.

Eu quero que qualquer alias/function/script encontre/localize e exclua todos os diretórios vazios no meu diretório pessoal.

158
Santosh Kumar

O comando find é a principal ferramenta para operações recursivas do sistema de arquivos. Use o -type d expressão para informar find você está interessado em encontrar apenas diretórios (e não arquivos simples). A versão GNU versão de find suporta o -empty teste, então

$ find . -type d -empty -print

imprimirá todos os diretórios vazios abaixo do diretório atual.

Usar find ~ -… ou find "$HOME" -… para basear a pesquisa no seu diretório pessoal (se não for o seu diretório atual).

Depois de verificar se isso está selecionando os diretórios corretos, use -delete para excluir todas as correspondências:

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

Você pode chamar rmdir em todos os diretórios, pois rmdir somente excluirá um diretório se estiver vazio:

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

Se você também quiser imprimir os diretórios que estão sendo removidos, precisará verificar se eles estão vazios:

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

Aqui está um exemplo puro do bash (versão 4 ou superior):

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