Eu quero encontrar arquivos sem sufixo e excluí-los. Como você faz isso?

0

Eu gostaria de encontrar e excluir todos os arquivos de uma pasta e suas subpastas com uma determinada propriedade: que eles não tenham um sufixo de três letras. Como você faz isso? Obrigado.

    
por user274611 16.11.2013 / 15:59

3 respostas

3

TL; DR; (o que é uma péssima ideia ao deletar coisas automaticamente)

find . ! -name "*.???" -type f -max-depth 1 -delete

Devidamente explicado e testado:

Passo 0: Configurando o ambiente de teste:

mkdir test
cd test
touch test1
touch test1.bar
touch test1.foo
touch test1.baz
touch test1.bazar

Etapa 1: encontre todos os arquivos com extensão de três letras:

find . -name "*.???" -type f -print
./test1.bar
./test1.baz
./test1.foo

Passo 2: Invertendo a seleção

find . ! -name "*.???" -type f -print
./test1
./test1.bazar

Etapa 3: substitua o -print por -delete .

Se você não quiser mergulhar em subdiretórios, adicione um -max-depth=1

    
por 16.11.2013 / 16:17
2

Supondo que você tenha a versão bash 4+ (você pode verificar com bash --version )

shopt -s extglob  ##  turn on extended globbing
rm -- !(*.???)

Para recursividade:

shopt -s extglob globstar
rm -- **/!(*.???)

Em geral, eu recomendaria colocar essa linha em seu .bashrc, já que globbing estendido e globstar são realmente úteis:

shopt -s extglob globstar
    
por 16.11.2013 / 16:44
1

Você pode tentar com find .

Use isso para mostrá-los primeiro para garantir que você tenha os arquivos corretos:

find . -type f ! -name "*.???"

Quando tiver certeza de que deseja excluí-los, use:

find . -type f ! -name "*.???" -print0 | xargs -0 rm -rfv

ou se você preferir o -exec way:

find . -type f ! -name "*.???" -exec rm -rfv {} +

nota: O {} + só funciona a partir de uma certa versão (consulte o manual man find em -exec segundo parágrafo. Caso contrário, você pode usar -exec -rfv {} \; , mas isso gera muita sobrecarga, executando rm para cada arquivo.

Use isso na pasta correta. Caso contrário, substitua . pelo nome da pasta.

    
por 16.11.2013 / 16:18

Tags