거대한 디렉토리 계층 구조에서 “WSFY321.c”파일을 찾고 있습니다.
일반적으로 GNU find : find . -name "WSFY321.c"
하지만 대소 문자를 잘 모르겠습니다. 대문자, 소문자 또는 둘 다일 수 있습니다.
이 파일을 찾는 가장 쉬운 방법은 무엇입니까?
find . | grep -i "WSFY321.c"
보다 나은 것이 있습니까?
답변
최신 버전의 GNU find
에는 대소 문자를 구분하지 않는 이름 검색을위한 -iname
플래그가 있습니다.
find . -iname "WSFY321.c"
댓글
답변
GNU 찾기 또는이를 포함하는 다른 버전의 찾기 :
find . -iname "WSFY321.c"
다른 버전 :
find . -name "[Ww][Ss][Ff][Yy]321.[Cc]"
또는 느리지 만 입력하기 쉬운 절충안 :
find . -name "????321.c" | grep -i "/WSFY[^/]*$"
또는 zsh :
print -rl -- **/(#i)WSFY321.c
댓글
- @Gilles
grep
버전은 대문자 만 필터링하고 있습니다. ' ' [^ /] ' .. (/ 아님) - @Gilles에 대한 인수는 무엇입니까? 첫 번째 경우에 작은 따옴표 (정확한 파일 이름)를 따옴표없이 사용 하시겠습니까?
- @ Peter.O 아니요
*
다음에/
bash 버전입니다.grep -i
를 의미했습니다. I u 이름이WSFY
div로 시작하는 디렉토리에서 파일을 포착하지 않도록.*
대신[^/]*
를 설정합니다. >. - @Bernhard Consistency.
- Gilles에게 감사합니다. 잘못된 구문으로 이전 주석을 삭제하고 수정 된 버전을 테스트했지만 ' *없이 작동하지 않습니다 (예기치 않은 이유로; 적어도 나에게). 대소 문자를 구분하지 않는 옵션이 더 이상 작동하지 않습니다.
shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c
… '이 nocase glob : glob의 컨텍스트에서만 작동합니다 (또는 그렇게 보입니다).
답변
macOS 용 두 가지 솔루션 :
GNU 사용 find
:
brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c"
GNU 사용 sed
:
brew install gnu-sed --default-names # restart Terminal find -name "$(sed "s|\([[:alpha:]]\)|[\U\1\L\1]|g" <<<"WSFY321.c")"
댓글
- macOS Sierra에서는 기본적으로 -iname 옵션을 사용할 수 있습니다.
-type f
플래그를 사용하여 몇 번 더 틱을 깎아서 승리 할 수 있습니다. ' inode가 디렉토리이면 이름을 보지 마십시오. 하지만 그 '의 현명한 최적화 수준 …find . -iname \*WSFY321.c\* -type f