디렉터리와 파일 이름 조합 패턴으로 파일을 검색하는 방법

디렉터리와 파일 이름 조합 패턴으로 파일을 검색하는 방법

파일 시스템의 모든 디렉터리와 하위 디렉터리에서 "metadata"라는 이름의 .xml 파일을 모두 찾고 싶습니다. 비슷한 패턴으로 검색하는 방법이 있나요?

find . -name  */metadata/*.xml" (mixing find command and Gradle paralance)

?

답변1

$ find / -path "*/metadata/*" -name "*.xml"

또는 더 짧습니다( *경로 이름에서 둘 이상의 슬래시와 일치하기 때문에 -path).

$ find / -path "*/metadata/*.xml"

참고: 저는 /"파일 시스템에서"라고 말한 것을 사용했는데, 저는 "어디서나"로 해석했습니다.

또는 다음을 사용합니다 locate(모든 사용자가 액세스할 수 있는 파일만 찾습니다).

$ locate "/metadata/" | grep '\.xml$'

find( 위의 첫 번째 것과 약간 비슷합니다 )

답변2

알아야 할 것은 "find"의 -name이 실제로 "basename"이므로 실제 파일 이름을 얻으려면 먼저 "metadata"라는 이름의 디렉터리를 찾은 다음 임의의 *.xml 파일을 찾는 중첩된 찾기를 실행할 수 있다는 것입니다. 이 디렉토리에:

find . -type d -name metadata -exec sh -c '
shift $1;
while case $# in 0 ) break;; esac; do
   find "${1}/." ! -name . -prune -type f -name \*.xml
   shift
done
' 2 1 {} +

답변3

이것은 약간 엉성하지만 선택한 상위 디렉토리에 있을 때 시도해 볼 수 있습니다.

grep -nr "*metadata/*xml" .

관련 정보