Unix magic, exclua todos os arquivos .pyc de uma árvore de diretórios?

11

Existe uma maneira rápida de excluir todos os arquivos .pyc de uma árvore de diretórios?

interstar
fonte

Respostas:

28

Se você tem o GNU find, provavelmente deseja

find <directory name> -name '*.pyc' -delete

Se você precisar de algo portátil, será melhor usar

find <directory name> -name '*.pyc' -exec rm {} \;

Se a velocidade é muito importante e você tem o GNU find e o GNU xargs, então

find <directory name> -name '*.pyc' -print0|xargs -0 -p <some number greater than 1> rm

No entanto, é improvável que isso acelere, devido ao fato de que você estará aguardando a E / S.

Cian
fonte
perfeito ... obrigado. É o xargs eu sempre esqueço
Interstar
2
Caso eu tenha arquivos com espaços nos nomes, adquiri o hábito de sempre usar -print0 e "xargs -0".
Paul Tomblin
Você está inteiramente certo, deveria ter pensado nisso originalmente., Editado para refletir isso.
Cian
4
Você também pode usar diretamente '-delete' em vez de '-print0 | xargs -0 rm '. Mas é verdade que esta opção não está presente em todas as versões do 'find'.
rolaf
6

usando o comando find:

find /path/to/start -name '*.pyc' -exec rm -f {} \;
slubman
fonte
Isso é muito lento. O uso do xargs é mais rápido ou, se a sua versão do find suportar, altere " \;" no final para " +".
Pausado até novo aviso.
1
Pode ser um pouco mais lento - ele executa "rm" uma vez para cada arquivo em vez de colocá-los em lote - mas é a maneira mais portátil de fazer isso. O OP não disse que tipo de unix ele estava usando, e o Solaris ainda não possui o recurso -print0.
Kenster
1
+1, OP disse unix não linux, esta é a melhor solução portátil.
theotherreceive
Eu acho que esta solução é a única permissão para remover toneladas de arquivos, se eu não estiver errado usando xargs pode deixar em um erro de linha de comando por muito tempo. +1, também é minha escolha há anos.
drAlberT
Se você estiver usando um makefile para criar seu projeto, adicione-o ao destino "clean".
7119 Tom Newton
1

cd para o início da árvore de diretórios:

encontrar . -name '* .pyc' | xargs rm -f

Garry Harthill
fonte
Não é necessário cd, basta colocar o diretório superior no findcomando (no lugar de "ponto").
Pausado até novo aviso.
Isso não lida com espaços.
Cian