Como usar o find para remover os arquivos * .py ~ e * .pyc de uma só vez?

7

Desejo limpar um diretório (e subdiretórios) de cada ocorrência dos arquivos .py e .pyc . Eu tentei o seguinte

find . -name '*pyc' -o -name '*py~' -exec rm -f {} \;

que omitiu todos os arquivos pyc . Ao fazer

find . -name '*pyc' -o -name '*py~'

o comando encontra os arquivos pyc , que não são excluídos, seja qual for. Alguma ideia?

    
por Alex 04.04.2013 / 19:46

4 respostas

10

Em vez de usar o -o , por que não criar um padrão curinga?

find . -name '*py[c~]' -delete

ou:

find . -name '*py[c~]' -exec rm -f {} +
    
por 04.04.2013 / 19:58
10

O operador -a (implícito entre dois predicados) tem precedência sobre -o , então você precisa de parênteses:

find . \( -name '*pyc' -o -name '*py~' \) -a -exec rm -f {} +

(Eu incluo o -a acima apenas para fins de demonstração, não é necessário, pois é implícito). Substitui ; por + , pois provavelmente não há sentido em executar um rm por arquivo, se isso puder ser evitado.

    
por 04.04.2013 / 19:48
0

Se você tem o bash 4+, você nem precisa encontrar, já que globstar lhe dará globalização recursiva:

shopt -s globstar
for f in ./**/*.py{c,~}; do rm "$f"; done

Observe que shopt precisa estar em sua própria linha, em vez de ser separado por ; (e deve ser usado no topo de um script, diretamente abaixo da shebang, se possível).

    
por 28.05.2013 / 20:09
0

Eu sei que a questão não é tão nova ... mas talvez fosse o suficiente para usar

rm -f 'find . -name '*.pyc' -o -name '*.py~' '
    
por 10.05.2014 / 14:39

Tags