하나가 bash는 패턴과 일치하는 모든 파일을 나열 수있는 방법은 다음과 같습니다패턴과 일치하지 않는 파일을 나열 하시겠습니까? 여기
ls *.jar
어떻게 패턴의 보완을 나열? 즉 * .jar과 일치하지 않는 모든 파일?
하나가 bash는 패턴과 일치하는 모든 파일을 나열 수있는 방법은 다음과 같습니다패턴과 일치하지 않는 파일을 나열 하시겠습니까? 여기
ls *.jar
어떻게 패턴의 보완을 나열? 즉 * .jar과 일치하지 않는 모든 파일?
하나 개의 솔루션은 find
의 적절한 버전으로 ls -1|grep -v '\.jar$'
[ls의 출력을 분석하지 마십시오.] (http://mywiki.wooledge.org/ParsingLs), 감사합니다. –
@gniourf_gniourf는 'ls'를 파싱하거나 'goto'를 사용하는 것과 같은 규칙에 대해서는 종교적이지 않습니다. 때때로 이러한 솔루션이 가장 잘 작동합니다. –
이것은 이러한 경우 중 하나가 아닙니다. '찾는다. -print0 | grep -z '\ .jar $''는 --ignore 또는 Bash의 확장 된 globbing을 사용하지 않으려는 경우에도 더 잘 작동합니다. 대부분의 사람들은 어떤 규칙이나 그들이해야할 일을 이해하기 위해 전체 기사를 읽지 않으려 고합니다. "가장자리의 경우에는 작동하지 않습니다. 'find -print0'과'grep -z'를 대신 사용하십시오. –
이 될 것입니다, 당신이 뭔가를 할 수 있지만, 조금 잔인한 :
find . -maxdepth 1 ! -name '*.jar'
find
파일을 찾습니다. .
인수는 .
(현재 디렉토리)에서 검색을 시작하도록 지정합니다. -maxdepth 1
은 한 단계 깊이, 즉 현재 디렉토리 만 검색하려고한다고 말합니다. ! -name '*.jar'
은 이 아닌 파일을 모두과 일치하고 정규 표현식 *.jar
과 일치합니다.
내가 말했듯이,이 응용 프로그램에는 조금 과잉이지만, -maxdepth 1
을 제거하면 재귀 적으로 모든 비 jar 파일을 검색 할 수 있습니다.
작은 알려진 bash는 확장 규칙 :
ls !(*.jar)
bash :! : 이벤트를 찾을 수 없습니다. 내가 무엇이 필요 하나? – paislee
먼저 명령 줄에서 'shopt -s extglob'를 실행 한 다음 명령을 입력하십시오. –
사용 egrep을 스타일의 확장 패턴 매칭.
ls !(*.jar)
이 기능은 bash-2.02-alpha1부터 사용할 수 있습니다. 먼저 bash는-4.1-알파로
shopt -s extglob
기본적으로이 가능하게하는 설정 옵션이 활성화해야합니다.
shopt -s extglob에 대한 언급이 있습니다. –
정답입니다. 올바른 것으로 표시된 대답은 셸을 직접 사용하지 않고 보조 명령을 사용합니다. – dbn
@dbw -이 답변이 더 마음에 드는데, 받아 들인 대답은 그 질문에 좋습니다. OP는 특별히 "셸 직접 사용"을 요구하지 않습니다. –
POSIX는 일치하지 않는 대괄호 식을 정의하므로 셸에서 파일 이름을 확장 할 수 있습니다.
ls *[!j][!a][!r]
이것은 약간의 단점을 가지고 있지만 최소한 유닉스 쉘과 호환됩니다.
POSIX 준수를 위해 +1. 별칭과 결합 된 약간의 bash/python/ruby 함수. "lsnot"은 쉽게 사용할 수 있습니다. – Nikkolasg
3 문자보다 짧은 문자는 일치하지 않습니다. –
파일 확장명을 두 개 이상 제외하려면 파이프 |
(예 : 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
해야 할 수도 있습니다.
이것을'! (*. [bj] ar)'로 단축 할 수 있습니다. –
이것은 정규 표현식으로 레이블링해서는 안되며, *는 쉘 - globbing 와일드 카드이며, 정규 표현식 *이 아니며 "0 개 이상의 한정어"입니다. – sweaver2112
좋은 점은, 정규식을 사용하는 것이 아마 당신이 기대하는 것과 일치하는 것을 얻는 것이 더 나은 방법이라는 것을 배우기는하지만 말입니다. – paislee