program tip

패턴과 일치하지 않는 파일을 나열 하시겠습니까?

radiobox 2021. 1. 9. 09:42
반응형

패턴과 일치하지 않는 파일을 나열 하시겠습니까?


bash에서 패턴과 일치하는 모든 파일을 나열하는 방법은 다음과 같습니다.

ls *.jar

패턴의 보완을 나열하는 방법은 무엇입니까? 즉 * .jar와 일치하지 않는 모든 파일?


ls | grep -v '\.jar$'

예를 들어.


egrep 스타일의 확장 패턴 일치를 사용하십시오.

ls !(*.jar)

bash-2.02-alpha1부터 사용할 수 있습니다. 먼저 활성화해야합니다.

shopt -s extglob

bash-4.1-alpha에는 기본적으로 활성화하는 구성 옵션이 있습니다.


거의 알려지지 않은 bash 확장 규칙 :

ls !(*.jar)

POSIX는 일치하지 않는 대괄호 표현식을 정의하므로 쉘이 파일 이름을 확장하도록 할 수 있습니다.

ls *[!j][!a][!r]

이것은 몇 가지 단점이 있지만 적어도 모든 유닉스 쉘과 호환됩니다.


의 적절한 버전을 사용하면 find다음과 같이 할 수 있지만 약간 과잉입니다.

find . -maxdepth 1 ! -name '*.jar'

find파일을 찾습니다. .인수를 지정 당신은에서 검색을 시작하려는 .현재 디렉토리를 즉. -maxdepth 1한 수준 깊이, 즉 현재 디렉터리 만 검색하도록합니다. regex와 일치 하지 않는! -name '*.jar' 모든 파일을 찾습니다 .*.jar

내가 말했듯이이 응용 프로그램에는 약간 과잉이지만을 제거하면 -maxdepth 1jar 파일이 아닌 모든 파일이나 쉽게 사용할 수있는 파일을 재귀 적으로 검색 할 수 있습니다.


한 가지 해결책은 ls -1|grep -v '\.jar$'


하나 이상의 파일 확장자를 제외 할 경우에, 파이프로 구분 |처럼 ls test/!(*.jar|*.bar). 해 보자:

$ mkdir test
$ touch test/1.jar test/1.bar test/1.foo
$ ls test/!(*.jar|*.bar)
test/1.foo

shopt -s extglob먼저 필요한 다른 답변을 살펴보십시오 .


귀하의 경우 ls지원이 ( man ls) 사용 --hide=<PATTERN>옵션을 선택합니다. 귀하의 경우 :

$> ls --hide=*.jar

ls(매우 나쁘기 때문에) 의 출력을 구문 분석 할 필요가 없으며 여러 유형의 파일을 표시하지 않도록 확장됩니다. 어느 시점에서 나는 어떤 비 소스, 비 객체, 비 libtool 생성 파일이 (정돈 된) 디렉토리에 있는지 확인해야했습니다.

$> ls src --hide=*.{lo,c,h,o}

매력처럼 작동했습니다.


또 다른 방법은 ls -I플래그 (Ignore-pattern)를 사용하는 것입니다.

ls -I '*.jar'

참조 URL : https://stackoverflow.com/questions/8525437/list-files-not-matching-a-pattern

반응형