거대한 디렉토리 계층 구조에서 “WSFY321.c”파일을 찾고 있습니다.
일반적으로 GNU find : find . -name "WSFY321.c"
하지만 대소 문자를 잘 모르겠습니다. 대문자, 소문자 또는 둘 다일 수 있습니다.

이 파일을 찾는 가장 쉬운 방법은 무엇입니까?
find . | grep -i "WSFY321.c"보다 나은 것이 있습니까?

답변

최신 버전의 GNU find에는 대소 문자를 구분하지 않는 이름 검색을위한 -iname 플래그가 있습니다.

find . -iname "WSFY321.c" 

댓글

  • 또한 ' 구체적으로 파일을 찾고있는 경우 아마 -type f 플래그를 사용하여 몇 번 더 틱을 깎아서 승리 할 수 있습니다. ' inode가 디렉토리이면 이름을 보지 마십시오. 하지만 그 '의 현명한 최적화 수준 …
  • 일부 정규식으로 작업하려면 find . -iname \*WSFY321.c\* -type f

답변

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.* 대신 [^/]*를 설정합니다. >.
  • @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 옵션을 사용할 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다