Excluir arquivos de extensão particular, exceto um no Linux

0

Eu tenho arquivos:

a.txt
b.txt
e.txt
c.c
d.o

Desejo excluir APENAS% arquivos.txt, excluindo e.txt , para que os arquivos que permanecerão no final sejam:

e.txt
c.c
d.o
    
por Abhishek Gupta 20.09.2016 / 05:22

3 respostas

2

dados:

cpetro01@<work_laptop> ~/Notes/test
$ ls
a.jpg  a.txt  b.mov  b.txt  c.jpg  c.mov

faça:

$ find ./ -name "*.txt" -not -name "e.txt"
./a.txt
./b.txt

assim:

cpetro01@<work_laptop> ~/Notes/test
$ ls
a.jpg  a.txt  b.mov  b.txt  c.jpg  c.mov  e.txt

cpetro01@<work_laptop> ~/Notes/test
$ find ./ -name "*.txt" -not -name "e.txt" -exec rm {} \;

cpetro01@<work_laptop> ~/Notes/test
$ ls
a.jpg  b.mov  c.jpg  c.mov  e.txt

Assim?

    
por 20.09.2016 / 05:48
0

Duas maneiras:

  • Usando a variável GLOBIGNORE para indicar o (s) nome (s) do arquivo que seria ignorado durante a globbing:

    GLOBIGNORE=e.txt
    rm -- *.txt
    unset GLOBIGNORE
    
  • Definindo a opção extglob e usando globbing estendido para corresponder a todos os arquivos .txt , exceto e.txt :

    shopt -s extglob
    rm -- !(e).txt
    shopt -u extglob
    
por 20.09.2016 / 05:30
0

Isso listará todos os arquivos .txt , exceto e.txt :

ls -1 *.txt | grep -v '^e.txt$'

Você pode então fazer a substituição de comandos para informar rm para excluir esses arquivos:

rm $(ls -1 *.txt | grep -v '^e.txt$')
    
por 20.09.2016 / 06:00