3 maneiras de excluir todos os arquivos em um diretório, exceto um ou poucos arquivos com extensões

3 maneiras de excluir todos os arquivos em um diretório, exceto um ou poucos arquivos com extensões

Às vezes, você entra em uma situação em que precisa excluir todos os arquivos em um diretório ou simplesmente limpar um diretório removendo todos os arquivos, exceto arquivos de um determinado tipo (terminando com uma extensão específica).

Neste artigo, mostraremos como excluir arquivos em um diretório, exceto determinadas extensões de arquivo ou tipos usando rm, encontrar e Globignore comandos.

Antes de avançarmos mais, vamos começar brevemente dando uma olhada em um conceito importante no Linux - Filename Pattern Matching, que nos permitirá lidar com nosso problema em mãos.

Leia sugerida: Use o comando find para pesquisar vários nomes de arquivos/extensões no Linux

No Linux, um padrão de shell é uma string que consiste nos seguintes caracteres especiais, que são referidos como curingas ou Metacharacters:

  1. * - corresponde a zero ou mais caracteres
  2. ? - corresponde a qualquer personagem
  3. [SEQ] - corresponde a qualquer personagem no SEQ
  4. [[!SEQ] - corresponde a qualquer personagem que não esteja no SEQ

Existem três métodos possíveis que exploraremos aqui, e eles incluem:

Excluir arquivos usando operadores de correspondência de padrões estendidos

Os diferentes operadores de correspondência de padrões estendidos estão listados abaixo, onde lista de padrões é uma lista contendo um ou mais nomes de arquivos, separados usando o | personagem:

  1. *(lista de padrões) - corresponde a zero ou mais ocorrências dos padrões especificados
  2. ?(lista de padrões) - corresponde zero ou uma ocorrência dos padrões especificados
  3. +(lista de padrões) - corresponde a uma ou mais ocorrências dos padrões especificados
  4. @(lista de padrões) - corresponde a um dos padrões especificados
  5. !(lista de padrões) - corresponde a qualquer coisa, exceto um dos padrões fornecidos

Para usá -los, habilite o extglob Opção Shell da seguinte maneira:

# shopt -s extglob 

1. Para excluir todos os arquivos em um diretório, exceto o nome do arquivo, digite o comando abaixo:

$ rm -v !("nome do arquivo") 
Exclua todos os arquivos, exceto um arquivo no Linux

2. Para excluir todos os arquivos com exceção de FILENAME1 e FILENAME2:

$ rm -v !("nome do arquivo1" | "nome do arquivo2") 
Exclua todos os arquivos, exceto alguns arquivos no Linux

3. O exemplo abaixo mostra como remover todos os arquivos além de todos .fecho eclair arquivos interativamente:

$ rm -i !(*.fecho eclair) 
Exclua todos os arquivos, exceto arquivos zip no Linux

4. Em seguida, você pode excluir todos os arquivos em um diretório além de todos .fecho eclair e .ODT arquivos da seguinte forma, ao exibir o que está sendo feito:

$ rm -v !(*.zip |*.odt) 
Exclua todos os arquivos, exceto determinadas extensões de arquivo

Depois de ter todos os comandos necessários, desligue o extglob opção de shell como assim:

$ shopt -u extglob 

Exclua arquivos usando o comando Linux Find

Sob esse método, podemos usar o comando de encontrar exclusivamente com opções apropriadas ou em conjunto com Xargs comando empregando um pipeline como nos formulários abaixo:

$ find / diretório / -type f -not -name 'padring' -Delete $ find / diretório / -Type f -not -name 'padrão' -print0 | xargs -0 -i  rm  $ find / diretório / -type f -not -name 'padrão' -print0 | Xargs -0 -i  rm [options]  

5. O comando a seguir excluirá todos os arquivos além .gz arquivos no diretório atual:

$ encontre . -Tipo F -não -name '*.GZ'-Delete 
Comando encontre - remova todos os arquivos, exceto .Arquivos GZ

6. Usando um oleoduto e Xargs, Você pode modificar o caso acima da seguinte forma:

$ encontre . -tipo f -não -name '*gz' -print0 | Xargs -0 -i  rm -v  
Remova os arquivos usando os comandos Find e XARGS

7. Vejamos um exemplo adicional, o comando abaixo acabará com todos os arquivos excluindo .gz, .ODT, e .jpg arquivos no diretório atual:

$ encontre . -tipo f -não \ ( -nome '*gz' -or -name '*odt' -or -name '*.jpg '\) -Delete 
Remova todos os arquivos, exceto extensões de arquivo

Excluir arquivos usando variável Bash Globignore

Esta última abordagem, no entanto, só funciona com Bash. Aqui o Globignore A variável armazena uma lista de padrões separada pelo cólon (nomes de arquivos) a ser ignorada pela expansão do nome do caminho.

Leia sugerida: Útil 12 exemplos práticos no comando Grep no Linux

Para empregar esse método, mova -se para o diretório que deseja limpar e depois defina o Globignore variável da seguinte maneira:

$ cd teste $ globignore =*.ODT:*.ISO:*.TXT 

Neste caso, todos os arquivos que não sejam .ODT, .ISO, e .TXT arquivos com serem removidos do diretório atual.

Agora execute o comando para limpar o diretório:

$ rm -v * 

Depois, desligue Globignore variável:

$ Unset Globignore 
Excluir arquivos usando variável Bash Globignore

Observação: Para entender o significado das bandeiras empregadas nos comandos acima, consulte as páginas do homem de cada comando que usamos nas várias ilustrações.

Isso é tudo! Se você tiver outras técnicas de linha de comando em mente para o mesmo objetivo, não se esqueça de compartilhar conosco por meio de nossa seção de feedback abaixo.