3 maneiras de excluir todos os arquivos em um diretório, exceto um ou poucos arquivos com extensões
- 2137
- 339
- Mr. Mitchell Hansen
À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:
*
- corresponde a zero ou mais caracteres?
- corresponde a qualquer personagem[SEQ]
- corresponde a qualquer personagem no SEQ[[!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:
*(lista de padrões)
- corresponde a zero ou mais ocorrências dos padrões especificados?(lista de padrões)
- corresponde zero ou uma ocorrência dos padrões especificados- +(lista de padrões) - corresponde a uma ou mais ocorrências dos padrões especificados
@(lista de padrões)
- corresponde a um dos padrões especificados!(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'-DeleteComando 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 -vRemova 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 '\) -DeleteRemova 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 GlobignoreExcluir 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.
- « Photorec - recuperar arquivos excluídos ou perdidos no Linux
- Tecmint.com - os melhores artigos visualizados de 2016 »