이름에 특정 하위 문자열도 포함된 파일 찾기

이름에 특정 하위 문자열도 포함된 파일 찾기

일반적으로 파일 이름에 여러 하위 문자열이 동시에 포함된 파일을 찾아야 하는 경우가 많습니다. Bash로 이 작업을 어떻게 수행할 수 있나요?

예를 들어 "linux.htm에서 Boost를 qt와 연결하는 방법"이라는 파일의 "boost", "qt" 및 "linux"입니다.

PS 마지막으로 다음을 사용하여 파일을 찾았습니다.

find . -name *boost* | xargs find . -name *Qt*

그러나 먼저 다음과 같은 불만 사항을 제공합니다.

xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
find: paths must precede expression

그래서 저는 여전히 더 명확한 해결책을 찾고 있습니다.

PS Stéphane Chazelas의 솔루션이 도움이 되었습니다. 문제는 "boost"의 큰 문자 "b"에 있으므로 이 조회에서는 대소문자를 구분하지 않도록 해야 합니다.

find . -iname '*boost*' -iname '*qt*'

답변1

find /some/path -name '*boost*' -name '*Qt*'

또는 전체 경로를 일치시킵니다.

find /some/path -path '*boost*' -path '*Qt*'

이러한 패턴을 인용하지 않으면 먼저 쉘에 의해 확장됩니다.

일부 구현에는 대소문자를 구분하지 않는 일치를 위한 / 가 find있습니다 . 그렇지 않으면 언제든지 다음을 수행할 수 있습니다.-iname-ipath

find /some/path -name '*[bB][oO][oO][sS][tT]*' -name '*[qQ][tT]*'

또는 파일 경로에 개행 문자가 포함되어 있지 않다고 가정합니다.

find /some/path |
  awk -F/ '{lname=tolower($NF)}; lname ~ /boost/ && lname ~ /qt/'

답변2

find /some/path -name "*boost*" -a -name "*qt*"등을 이용한다 .

'함께' 라는 뜻을 가지고 -a있습니다.

관련 정보