우리는 찾고 싶습니다 .hprof
./var
차이점이 뭐야
find /var -type f -regex '.*\.hprof'
/var/ff-efre-ferg-fr.hprof
그리고
find /var -type f -name "*.hprof"
/var/ff-efre-ferg-fr.hprof
아니면 검색 방법이 완전히 동일합니까?
답변1
조건자는 -name
표준이며 파일 이름만 일치하고 쉘 와일드카드 구문을 사용합니다.
이는 일부 구현에서 지원되는 -regex
비표준 확장이지만 find
구문이 다르고 전체 경로(여기에 제공된 경로 인수로 시작 /opt
)와 일치합니다.
기본 구문은 정규식의 일부 형태입니다. 예를 들어 GNU find
, GNU emacs
정규식을 사용하면 -regextype
조건자에서 다양한 정규식 유형을 사용할 수 있습니다. 일부 BSD의 경우 이는 표준 기본 정규식이며 -E
옵션(술어 대신)을 사용하여 표준 확장 정규식으로 전환할 수 있습니다.
또 다른 표준 조건자가 있습니다. -path
like는 -regex
전체 경로와 일치하고 like는 -name
쉘 와일드카드를 사용합니다.
일부 구현에서는 대소문자를 구분하지 않고 일치하도록 일부 -iname
, -ipath
, 조건자를 지원합니다. -iregex
GNU는 (rms 객체를 단어로) 지원 find
합니다 .-wholename
-path
길일부 디렉터리 구성 요소를 포함한 전체 파일 이름을 나타냅니다.
find /opt -type f -regex '.*\.hprof'
그리고
find /opt -type f -path '*.hprof'
지원되는 -regex
와일드카드 *
및 정규식(모든 변형) .*
은 .임의 개수의 문자.
그들은 다른 결과를 줄 수 있습니다
find /opt -type f -name '*.hprof'
경로 구성 요소(이름 제외)에 로케일에서 유효한 문자를 형성하지 않는 일련의 바이트가 포함된 파일의 경우.
$ mkdir $'St\351phane'
$ touch $'St\351phane/file.hprof'
$ locale charmap
UTF-8
$ find . -regex '.*\.hprof'
$ find . -path '*.hprof'
$ find . -name '*.hprof'
./St?phane/file.hprof
이는 디렉터리이지만 UTF-8이 아닌 iso8859-1(0351, 0xe9)로 Stéphane
인코딩됩니다 . é
UTF-8 로케일에서 이 0xe9 바이트는 문자에 매핑되지 않으므로 정규식 .
이나 와일드카드 *
(적어도 GNU의 경우 find
)와 일치하지 않습니다. 하지만 파일의 기본 이름( file.hprof
)은 괜찮으므로 -name
일치합니다.
이식성과 신뢰성을 극대화하기 위한 몇 가지 경험 법칙:
-name
*.hprof
여기에서 확장자 검색 과 같이 파일 이름만 일치시키고 파일이 있는 디렉터리는 일치시키지 않아도 되는 경우(와일드카드 구문이면 충분함)에 사용하세요 .-path
파일이 있는 위치도 일치시켜야 하는 경우(예find . -path ./special-dir -prune -o -type f -print
: )(와일드카드 구문으로 충분함) 를 사용하십시오.-regex
와일드카드가 충분하지 않은 경우 와일드카드를 사용하되 대상으로 삼아야 하는 구현의 지원을 확인하고 정규식 구문이 다를 수 있다는 점에 유의하세요. 파일 이름만 일치시켜야 하는 경우 canmatch 를 사용하지 마십시오/
.