Eu quero excluir todos os arquivos na árvore de diretórios atual, exceto aqueles em save
. Eu executei este comando:
find . \( -name save -prune \) -o -type f -ls | grep /save/
e não encontrou nenhum. Mas quando eu executei este comando:
find . \( -name save -prune \) -o -type f -delete
Todos esses arquivos em / save / foram embora. o que estou perdendo?
mv save/ ../some/safer/location
antes de um comando de exclusão "genérico" (... mas é claro, antes de sua postagem, eu teria feito a mesma verificação e enfrentado o mesmo problema!). Agora vá encontrar um bom "undelete" para o sistema de arquivos em que os arquivos estavam ^ ^ #Respostas:
-delete
implica-depth
que não funciona-prune
(-depth
começa com as folhas). Há um aviso sobre isso no manual da versão GNU (-delete
é uma extensão do FreeBSD agora também suportada pelo GNUfind
e algumas outras implementações).Aqui, você tem a opção de usar
rm
:(potencialmente inseguro se houver diretório gravável por outras pessoas, pois é possível excluir arquivos fora da árvore de diretórios atual, substituindo os diretórios por links simbólicos enquanto você executa esse comando).
Uma alternativa mais segura:
Isso não tem o problema mencionado acima, mas significa executar um
rm
por arquivo. A--
é necessária para a implementação FreeBSD, e não o GNU um que nomes de arquivos prefixos com./
.Como alternativa, conforme sugerido por Costas:
(mas isso ainda é desnecessário em
save
diretórios)The
LC_ALL=C
is there*
corresponde a qualquer sequência de bytes (mesmo aqueles que não formam caracteres válidos no código de idioma atual). Observe que isso afetará o idioma das mensagens de erro (inglês em vez do idioma do usuário).fonte
rm
?