종종 파일 이름이 있고 "content / docs / file.xml"과 같은 부분 경로입니다.
디렉토리 이름과 파일 이름을 별도로 제공하기 위해 파일 이름을 수동으로 자르지 않고 해당 파일을 검색하는 간단한 방법이 있습니까?
그런 find
식으로 일 하면 좋을 것이므로 실행할 수 find content/docs/file.xml
는 있지만 불행히도 그렇지 않습니다.
종종 파일 이름이 있고 "content / docs / file.xml"과 같은 부분 경로입니다.
디렉토리 이름과 파일 이름을 별도로 제공하기 위해 파일 이름을 수동으로 자르지 않고 해당 파일을 검색하는 간단한 방법이 있습니까?
그런 find
식으로 일 하면 좋을 것이므로 실행할 수 find content/docs/file.xml
는 있지만 불행히도 그렇지 않습니다.
답변:
A의 패스 *
에 일치 나타 내기 위해 와일드 카드 아무것도 . 또한 다음을 피해야합니다 *
. 예 :
find . -path \*content/docs/file.xml
또는 패턴을 따옴표로 묶습니다. 예 :
find . -path "*content/docs/file.xml"
매뉴얼 페이지에 설명되어 있습니다 :
$ 찾기. -name * .c -print
찾기 : 경로는 식보다 앞에 와야합니다
쉘에 의해 * .c가 확장되어 find가 실제로 다음과 같은 명령 행을 수신하기 때문에 발생합니다.
검색 . -name bigram.c code.c frcode.c locate.c -print
그 명령은 물론 작동하지 않을 것입니다. 이런 식으로 작업하는 대신 패턴을 따옴표로 묶거나 와일드 카드를 이스케이프해야합니다.
$ 찾기. -이름 \ *. c-인쇄
find에는 -wholename 옵션도 있습니다 find $top_dir -wholename *string*
find /usr -wholename *in/abiw*
>/usr/bin/abiword
find . -type f | grep "content/docs/file.xml"
아니면 그냥
locate content/docs/file.xml
예를 들어 별표 / 와일드 카드 ( *
)를 사용하여 위치에서 파일을 검색하는 경우 :
dir=“/apps/*/instance01/"
find를 사용할 수 ${dir} -name “*.jks”
있습니다. 모든 파일을 다음과 같이 배열에 넣습니다.
arr=(`find ${dir} -name “*.jks"`)
다른 확장자를 가진 파일을 얻으려면 다음과 같이 '또는'을 사용하십시오.
-name "*.keystore" -o -name "*.jks" -o -name “*.p12"
때문에 -name
오직이 하나의 문자열을 받아 그래서 '또는'사용합니다.
마지막으로 모든 것을 다음과 같이 배열에 넣습니다.
arr=(`find ${dir} -name "*.keystore" -o -name "*.jks" -o -name "*.p12"`)
부분 경로가 아닌 전체 경로가있는 경우 다음과 같이 배열에 배치하는 것이 훨씬 쉽습니다.
arr=(“/Users/ajay/Documents/keystore_and_p12files/"*.{keystore,p12,jks})
find -path *content/docs/file.xml
나를 위해 일했다.