파일 시스템의 모든 디렉터리와 하위 디렉터리에서 "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" .