find
é muito útil para executar ações seletivamente em uma árvore inteira.
find . -type f -name ".Apple*" -delete
Aqui, o -type f
certifica-se de que é um arquivo, não um diretório, e pode não ser exatamente o que você deseja, pois também ignorará links simbólicos, soquetes e outras coisas. Você pode usar ! -type d
, o que literalmente significa não diretórios, mas também pode excluir caracteres e bloquear dispositivos. Eu sugiro olhar para o -type
predicado na página de manual find
.
Para fazer isso estritamente com um curinga, você precisa de suporte avançado ao shell. O Bash v4 tem a globstar
opção , que permite corresponder recursivamente subdiretórios usando **
. zsh
e ksh
também suporta esse padrão. Usando isso, você pode fazer rm -rf **/.Apple*
. Como o POSIX não é padrão e não é muito portátil, evitaria usá-lo em um script, mas para uma ação de shell interativa única, tudo bem.
find . -type d -name .Apple*
a trabalhar - ele lista todas as pastas. No entanto, falha quando adiciono-delete
no final. Ele volta com o resumo de uso. Está sendo executado no BusyBox v1.1.1. Isso faz alguma diferença?-delete
também não é POSIX.**
foi introduzidozsh
no início dos anos 90. É agora (por ordem cronológica de aparência) também em ksh93, fish, bash e tcsh.rm -rf **/.Apple*
-delete
não funcionar, use em seu-exec rm -f {} +
lugar.find
ser detalhado ao excluir? Suponho que o método "globstar" faria isso adicionando a-v
opção.Eu tive problemas usando
find
com-delete
devido ao comportamento intencional defind
(ou seja, recusando-se a excluir se o caminho começar com ./, o que eles fazem no meu caso), conforme declarado em sua página de manual:Em vez disso, eu era capaz de fazer
Para o seu caso, parece que citar a glob (asterisco, *) foi a solução, mas eu queria fornecer minha resposta caso alguém mais tivesse o mesmo problema.
NOTA: Anteriormente, minha resposta era fazer o seguinte, mas o @Wildcard apontou as falhas de segurança ao fazê-lo nos comentários.
fonte
xargs
aqui.-exec rm -r {} \;
ou, melhor,-exec rm -r {} +
fará o mesmo sem falhar nos nomes de arquivos de caracteres especiais. Consulte Por que o loop sobre a prática inadequada de saída do find?mkdir -p $'blah\nDocuments\n/etc\n/home\n/received__output'
no seu diretório e execute o mesmo comando novamente, se você não acredita que há potencial para perda de dados. Ou, já que a pergunta é sobre o Mac OSmkdir -p $'blah\nDocuments\n/Users\n/Applications\n/received__output'
,. ( Aviso: Você irá apagar todos os seus arquivos se você fizer isso Esse é o meu tipo de ponto..)O que é possível é que não haja nada errado com o comando rm / find, mas que o usuário com o qual você efetuou login não possui permissões de exclusão. Use
ls -l
para listar itens com suas permissões e você pode identificar quem você é com os comandosid
egroups
(deve estar disponível). Se você for o "usuário errado" para fazer isso, será necessário alterar as permissões / propriedade dos arquivos ou alternar para outro usuário.fonte
Experimentar:
fonte
dotglob
é inútil aqui. Veja esta página para um exemplo do que o dotglob faz.Comando simples:
Boa sorte!
fonte