No linux, como deletar todos os arquivos EXCETO o padrão * .txt?

61

Eu sei como excluir todo o arquivo txt no diretório atual por rm *.txt . Alguém sabe como apagar todos os arquivos no diretório atual EXCETO txt arquivo?

    
por Firegun 05.06.2013 / 17:50

6 respostas

93

Você pode usar find :

find . -type f ! -name '*.txt' -delete

Os recursos de globbing estendido do bash:

shopt -s extglob
rm *.!(txt)

Ou em zsh:

setopt extendedglob
rm *~*.txt(.)
#  ||     ^^^ Only plain files
#  ||^^^^^ files ending in ".txt"
#  | \Except
#   \Everything
    
por 05.06.2013 / 17:56
8

existem muitas maneiras de fazer isso. mas a maneira mais simples seria (bash):

shopt -s extglob
rm !(*.txt)
    
por 05.06.2013 / 17:57
8

Se você quiser excluir apenas todos os arquivos , exceto '* .txt', poderá usar o seguinte comando:

$ find . -type f ! -name "*.txt" -exec rm -rf {} \;

mas se você também quiser excluir diretórios junto com os arquivos, poderá usar isto:

$ find . ! -name "*.txt" -exec rm -r {} \;

    
por 06.06.2013 / 08:41
3

Você pode usar grep e xargs invertidos

ls | grep -v .txt$| xargs rm
    
por 05.06.2013 / 17:57
3

Uma solução sem find :

mv dir/*.txt otherdir/
rm -r dir
mv otherdir dir

Isso deve funcionar em todos os tipos de conchas.

    
por 05.06.2013 / 17:56
0

Faça simplesmente:

rm $(ls -I "*.txt" ) #Deletes tipo de arquivo, exceto * .txt

Da mesma forma, se precisar excluir "exceto um ou mais tipos de arquivo", faça:

rm $(ls -I "*.txt" -I "*.pdf" ) #Deletes, exceto * .txt & * .pdf

    
por 21.07.2016 / 17:48