glob match에서 하나의 패턴을 제외


53

기본 파일 이름이 같은 파일이 여러 개 있습니다. 하나를 제외한 모든 것을 제거하고 싶습니다

foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc

보관할 필요가 없으면 사용할 수 있음을 알고 있습니다 rm foo.*.

TLDP^ 는 경기를 부정하는 것을 보여줍니다 . 시행 착오를 통해 나는 그것을 찾을 수 있었다

rm foo.*[^org]

필요한 것을 수행하지만 구문을 실제로 이해하지 못합니다.

또한 내 유스 케이스에는 제한이 없지만이 패턴도 foo.o및 을 무시한다고 생각합니다 foo.or. 어떻게, 그리고 어떤 글로브이 패턴 작업 무시 것이다 않는 유일한 foo.org 모습?


1
그 언급 할 가치가 대답 @glen 할 수있는 별도로 rm foo.*[^org]모든 파일을 제거 마지막 도 문자가 o, r또는 g, 그래서 foo.foo중 하나와 일치하지 않을 것입니다.
jimmij

을 사용하고 Regular Expression있습니다. 그룹화 문자에주의해야합니다. 괄호를 사용하여 당신은 당신이 문자로 확장 한 모든 파일을 삭제 할 문자 클래스의 의미 지정한 o, r또는 g임의의 순서로합니다. 괄호를 사용하여 그룹을 작성하고 문자 순서를 유지하십시오.
Mr. Mascaro

3
@ jbarker2160-그것은 실제로 정규 표현식이 아니며, 더 일반적으로 정규 표현식의 하위 집합 인 glob (또는 filename pattern ) 이라고합니다 . 자세한 내용은 bash 맨 페이지의 패턴 일치 섹션을 참조하십시오 그의 패턴 foo.*[^org]foo.마지막 문자가 o, r 또는 g가 아닌 점 다음에 하나 이상의 문자로 시작하는 모든 파일 이름과 일치합니다 . 그래서 일치합니다 foo.orb,하지만 foo.orgfoo.or또는 foo.o. GlennJackman의 답변은 확장 패턴 일치 기능을 활성화하여 일치를 무효화하는 방법을 보여줍니다.
Johnny

답변:


52
shopt -s extglob
echo rm foo.!(org)

이것은 "foo"입니다. "org"가 아닌 무엇인가

심판 : https://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching


나는 똑같이했지만 괄호로 시도했지만 괄호를 사용할 때 작동하지 않습니다.
Donato

4
여러 파일 이름과 일치하는 구문은 무엇입니까? .org, .png, .txt를 제외하고 싶습니다.
Freedo

@Freedo @(): 패턴-목록 stackoverflow.com/a/217208/3779853
phil294

23

bash에서는을 사용할 수도 있습니다 GLOBIGNORE="*.org"; rm -i foo*.

그리고 unset GLOBIGNORE완료되면.

보다 낫지는 shopt -s extglob않지만 기억하기가 더 쉽습니다.


5
@Ruslan 작동하지 않습니다. 해야 할 일( GLOBIGNORE="*.org"; rm -i foo* )
DBedrenko

3
무시 된 목록을 확장하려면 다음과 같이 콜론으로 구분하십시오.GLOBIGNORE="*foo*:*bar*"
phyatt

7

파이프가 할 수 있습니까?

ls * | grep -v "foo.org" | xargs -I {} echo {}

(마지막 체인에서 echo를 rm으로 바꾸고 싶을 수도 있습니다).


한 줄에 필요한 경우 유용합니다.
bruceskyaus

1
쉽게 (나를 위해, 나는 종종 그런 일을) 기억 : 부팅 더 복잡한 처리를 허용하는
drevicko

1
ls -1모든 파일을 grep개별적 으로 처리 할 수 ​​있도록보다 안정적이어야합니다
MichaelChirico

0

OP는 매우 가까웠다 :

rm foo.*[^o][^r][^g]

이 경우에는 *불필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.