Mais três opções.
Usar find
com -mindepth 1
e -delete
:
−mindepth levels
Não aplique nenhum teste ou ação em níveis menores que os níveis (um inteiro não negativo).
−mindepth 1 significa processar todos os arquivos, exceto os argumentos da linha de comando.
-excluir
Deletar arquivos; true se a remoção foi bem-sucedida. Se a remoção falhar, uma mensagem de erro será emitida.
Se −elelete falhar, o status de saída do Find será diferente de zero (quando finalmente sair). Uso de
−delete ativa automaticamente a opção −depth.
Teste cuidadosamente com a opção -depth antes de usar esta opção.
# optimal?
# -xdev don't follow links to other filesystems
find '/target/dir with spaces/' -xdev -mindepth 1 -delete
# Sergey's version
# -xdev don't follow links to other filesystems
# -depth process depth-first not breadth-first
find '/target/dir with spaces/' -xdev -depth -mindepth1 -exec rm -rf {} \;
2. Use find
, mas com arquivos, não diretórios. Isso evita a necessidade de rm -rf
:
# delete all the files;
find '/target/dir with spaces/' -type f -exec rm {} \;
# then get all the dirs but parent
find '/target/dir with spaces/' -mindepth 1 -depth -type d -exec rmdir {} \;
# near-equivalent, slightly easier for new users to remember
find '/target/dir with spaces/' -type f -print0 | xargs -0 rm
find '/target/dir with spaces/' -mindepth 1 -depth -type d -print0 | xargs -0 rmdir
3. Vá em frente e remova o diretório pai, mas recrie-o. Você poderia criar uma função bash para fazer isso com um comando; aqui está um simples one-liner:
rm -rf '/target/dir with spaces' ; mkdir '/target/dir with spaces'