Você deseja percorrer uma árvore de diretórios e ver se ela contém algo diferente de um diretório. Isso está além dos recursos do rm
. Você precisa de outras ferramentas, como find
. Você pode excluir os diretórios vazios sob um determinado diretório dessa maneira ( -depth
faz com que os diretórios-pai que ficam vazios sejam excluídos também):
find "$x" -depth -type d -exec rmdir {} +
Aqui está uma função que, para cada argumento, apaga o argumento se for um arquivo não-diretório ou uma árvore de diretórios que não contenha nada além de diretórios. Note que esta função não é atômica: se um dos argumentos mudar enquanto está sendo executado, você pode acabar com uma mensagem de erro, mas é seguro que não irá excluir nenhum diretório dentro de um diretório passado como argumento. / p>
rm () {
ret=0
for x; do
case $x in -*) x=./$x;; esac
if [ -d "$x" ]; then
if [ -n "$(find "$x" ! -type d | head -n 1)" ]; then
echo 1>&2 "$x: non-empty directory tree"
ret=2
else
find "$x" -depth -exec rmdir {} +
if [ -d "$x" ]; then ret=2; fi
fi
else
command rm "$x" || [ $ret -gt 1 ] || ret=2
fi
done
return $ret
}