지정된 확장자를 가진 파일을 제외하고 디렉터리의 모든 파일을 나열하는 방법은 무엇입니까?

지정된 확장자를 가진 파일을 제외하고 디렉터리의 모든 파일을 나열하는 방법은 무엇입니까?

다음이 포함된 폴더가 있다고 가정해 보겠습니다.. txt,.pdf및 기타 파일. "기타" 파일(예: 확장자가 없는 파일)을 나열하고 싶습니다.. txt또는.pdf). 이를 수행하는 방법에 대한 제안 사항이 있습니까?

특정 확장자 없이 파일을 나열하는 방법을 알고 있습니다. 예를 들어 목록을 작성하고 싶다면. txt파일을 만든 다음

find -not -iname "*.txt"

또는

ls | grep -v '\.txt$' | column

작동하는 것 같습니다. 그런데 어떻게 제외하고 나열할 수 있나요?. txt문서또는 .pdf문서? findor 안에 일종의 논리적 "or"를 사용해야 하는 것 같습니다 grep.

답변1

GNU 를 가정하면 ls이것이 아마도 가장 쉬운 방법일 것입니다:

ls -I "*.txt" -I "*.pdf"

모든 하위 디렉터리를 반복하려면 다음을 수행하세요.

ls -I "*.txt" -I "*.pdf" -R

답변2

지원 찾기-o

find . ! '(' -name '*.txt' -o -name '*.pdf' ')'

올바른 우선순위를 보장하려면 괄호가 필요합니다. Find는 많은 일을 할 수 있습니다. 맨페이지를 읽어보는 것이 좋습니다.

또는 in을 수행할 수도 있습니다 grep(그러나 실제로는출력을 구문 분석하면 안 됩니다.ls)

ls | grep -Ev '\.(txt|pdf)$' | column

답변3

bash확장된 와일드카드( open 사용 shopt -s extglob) 를 사용하면 와일드카드가 !(*.txt|*.pdf)작동합니다. .ls

답변4

find /path/to/directory '!' -name '*.pdf' '!' -name '*.txt'

이는 OR 연산자를 사용한 명령과 동일합니다.드모건의 법칙.

관련 정보