excluindo pastas no bash do linux

4

Estou tentando apagar no gnu / linux todas as pastas dentro de outra pasta que comece com um "." (ponto), para isso eu estou usando o utilitário find, é isso que eu tenho:

find . -iname ^\..* -exec rm -rf {} \;

mas não faz nada :(. Eu já testei a expressão regular e funciona bem. Alguma ajuda por favor ??

muito obrigado pelo seu tempo.

    
por Der Hochstapler 14.07.2010 / 02:38

4 respostas

5

find usa a sintaxe globbing e você pode usar -type d para localizar apenas os diretórios:

find . -type d -name '.?*' | vim -

Você precisa ser extremamente cuidadoso ao globlar ou usar o regex para encontrar .hidden arquivos, pois você pode facilmente pegar . e excluir sua pasta inteira ou, pior ainda, corresponder .. e você exclui sua pasta pai inteira. Considere as conseqüências do seguinte comando:

/home/someuser bash$ rm -rf .*
    
por 14.07.2010 / 02:43
1

-name e -iname usam globs, não regexs. Experimente -regex ou -iregex .

    
por 14.07.2010 / 02:41
0
find . -type d -iname ".*" -not -iname "." -not -iname ".."
    
por 14.07.2010 / 03:20
0

Se zsh for uma opção, você pode simplesmente usar: print **/.*(/) ou rm claro:)

    
por 14.07.2010 / 18:23