Linux에서 특정 확장자를 제외한 특정 확장자를 가진 파일 삭제

Linux에서 특정 확장자를 제외한 특정 확장자를 가진 파일 삭제

나는 파일을 가지고 있습니다 :

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

.txt포함되지 않은 파일 만 제거하고 싶으 e.txt므로 마지막으로 남은 파일은 다음과 같습니다.

e.txt
c.c
d.o

답변1

주어진:

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

하다:

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

그러므로:

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

그렇게요?

답변2

두 가지 방법:

  • 변수를 사용하여 GLOBIGNORE와일드카드 사용 시 무시될 파일 이름을 나타냅니다.

    GLOBIGNORE=e.txt
    rm -- *.txt
    unset GLOBIGNORE
    
  • 옵션을 설정 하고 확장된 와일드카드를 사용하여 다음을 제외한 모든 파일을 extglob일치시킵니다 ..txte.txt

    shopt -s extglob
    rm -- !(e).txt
    shopt -u extglob
    

답변3

.txt다음을 제외한 모든 파일이 나열됩니다 e.txt.

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

그럼 당신은 할 수 있습니다명령 대체다음 파일을 삭제 하라고 지시하세요 rm:

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

관련 정보