확장자가 .tif, .tiff, .TIF, .TIFF인 모든 파일을 나열합니다.

확장자가 .tif, .tiff, .TIF, .TIFF인 모든 파일을 나열합니다.

.tif중첩된 디렉터리가 주어지면 확장자가 , .TIF, . 인 .tiff모든 tif 파일을 나열하고 싶습니다 .TIFF.

현재 내가 사용하고 있는

find . -type f -iname *.TIF -print ; find . -type f -iname *.TIFF -print;

를 사용하면 -iname대소문자를 구분할 수 있지만 디렉토리를 두 ​​번 반복하여 .tif및 가 있는 파일을 가져옵니다 .tiff. 더 좋은 방법이 있나요? 어쩌면 버팀대 확장이 필요할 수도 있죠?

왜 안 돼 *.tif*?

어떤 경우에는 내 디렉토리에 .tif.aux.xmltiff 옆에 확장명이 있는 보조 파일이 포함될 수 있습니다. 나는 그것들을 무시하고 싶습니다.

답변1

find"또는" 분리를 지원합니다 -o.

find . -type f \( -iname \*.tif -o -iname \*.tiff \)

*.tif그러면 이름이 대소문자를 무시하고 일치하는 모든 파일이 나열됩니다 *.tiff.

-print은 기본 작업이므로 여기서 지정할 필요가 없습니다. *, ()이스케이프되므로 쉘에서 의미를 잃습니다.

답변2

을 사용하는 것보다 짧습니다 -o. 대신 정규식을 사용하세요.

find . -type f -iregex '.*\.tiff?'

중괄호 확장은 그렇지 않습니다글로벌 매치이므로 와 함께 사용할 수 없습니다 -(i)name.

답변3

find 명령을 실행하려는 트리의 최상위 디렉토리에 있다고 가정하고 원하는 출력을 얻는 간단한 방법은 다음과 같습니다. 면책 조항: 고급 사용 또는 조회 시나리오에는 적합하지 않습니다.

find -type f |egrep '.tif$|.tiff$|.TIF$|.TIFF$'

설명하다:

  1. 기본적으로 gnu find는 현재 디렉터리로 재귀하여 출력을 stdout으로 인쇄합니다(점 또는 -print 옵션이 필요하지 않음).
  2. egrep은 확장 정규식을 허용합니다. 끝에 있는 $는 파일 이름이 tif로 끝나야 함을 의미합니다. 따라서 foo.tif.bar는 일치하는 것으로 간주되지 않습니다.
  3. 이 파이프는 어떤 패턴과도 일치하는 OR입니다.

관련 정보