Remova os arquivos que não terminam em “.py” usando rm [duplicate]

0

Esta é uma pergunta muito simples e eu não sei se existe uma solução ou não.

Eu tenho alguns arquivos em um diretório, supondo que eu tenha .py e alguns outros arquivos de extensão. Agora eu gostaria de remover todos os arquivos, exceto aqueles que terminam em .py arquivos. Como eu poderia fazer isso com o comando rm ?

Eu quero algo como

!(rm *.py) 

É possível?

    
por Community 05.05.2011 / 15:44

4 respostas

7

shopt -s extglob
rm !(*.py)

Você ativa a variável extglob. Isso fornece alguns recursos extras de correspondência de padrões, particularmente a negação.

Você pode desativá-lo novamente com shopt -u extglob .

    
por 05.05.2011 / 15:48
4

Fácil de lembrar é encontrar:

find -not -name "*.py" -delete 

Ele também excluirá arquivos em subdiretórios, em comparação com a solução larsmas, mas você pode evitar isso com o parâmetro -maxdepth.

Nem toda implementação find pode suportar a opção delete . O Gnu encontra desde a versão 4.2.3.

    
por 05.05.2011 / 15:50
2

Supondo que você esteja usando o Bash:

shopt -s extglob
mv !(*.py) some_dir
    
por 05.05.2011 / 15:46
2
ls | grep -v ".py$" | xargs rm
    
por 05.05.2011 / 15:50