.tif
중첩된 디렉터리가 주어지면 확장자가 , .TIF
, . 인 .tiff
모든 tif 파일을 나열하고 싶습니다 .TIFF
.
현재 내가 사용하고 있는
find . -type f -iname *.TIF -print ; find . -type f -iname *.TIFF -print;
를 사용하면 -iname
대소문자를 구분할 수 있지만 디렉토리를 두 번 반복하여 .tif
및 가 있는 파일을 가져옵니다 .tiff
. 더 좋은 방법이 있나요? 어쩌면 버팀대 확장이 필요할 수도 있죠?
왜 안 돼 *.tif*
?
어떤 경우에는 내 디렉토리에 .tif.aux.xml
tiff 옆에 확장명이 있는 보조 파일이 포함될 수 있습니다. 나는 그것들을 무시하고 싶습니다.
답변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$'
설명하다:
- 기본적으로 gnu find는 현재 디렉터리로 재귀하여 출력을 stdout으로 인쇄합니다(점 또는 -print 옵션이 필요하지 않음).
- egrep은 확장 정규식을 허용합니다. 끝에 있는 $는 파일 이름이 tif로 끝나야 함을 의미합니다. 따라서 foo.tif.bar는 일치하는 것으로 간주되지 않습니다.
- 이 파이프는 어떤 패턴과도 일치하는 OR입니다.