파일 이름과 부분 경로로 파일을 어떻게 검색 할 수 있습니까?


64

종종 파일 이름이 있고 "content / docs / file.xml"과 같은 부분 경로입니다.

디렉토리 이름과 파일 이름을 별도로 제공하기 위해 파일 이름을 수동으로 자르지 않고 해당 파일을 검색하는 간단한 방법이 있습니까?

그런 find식으로 일 하면 좋을 것이므로 실행할 수 find content/docs/file.xml는 있지만 불행히도 그렇지 않습니다.


1
처음에 * 와일드 카드를 추가 할 수 있습니다. find -path *content/docs/file.xml나를 위해 일했다.
Bob

고마워, @ 밥, 정말 나를 위해 일했다. 흥미롭게도 별표 뒤에 슬래시를 추가하면 "find -path * / content / docs / file.xml"이 작동하지 않습니다. 어쨌든 많은 감사합니다.

또한 @Bob, 답변으로 작성하여 올바른 것으로 표시하겠습니다.

별표 후 슬래시가 작동하지 않은 이유는 아마도 별표가 이스케이프 되었기 때문일 것입니다. 내 답변 편집을 참조하십시오.
Bob

답변:


72

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-인쇄


10

find에는 -wholename 옵션도 있습니다 find $top_dir -wholename *string*

find /usr -wholename *in/abiw*

>/usr/bin/abiword

전체 경로를 모르고 부분적인 것만 알기 때문에 "-전체 ​​이름"이 작동하지 않습니다.

플래그는 오해의 소지가 있습니다. 제 예제를 참조하십시오. 알고 있다면 문자열을 디렉토리로 확장 할 수 있습니다
technosaurus

3
find . -type f | grep "content/docs/file.xml"

아니면 그냥

locate content/docs/file.xml

locate는 흥미로운 옵션이지만 전체 디스크를 검색합니다. 기본 검색 디렉토리를 지정하거나 적어도 param을 사용하여 지정하고 싶습니다.이 디렉토리에서 검색해야합니다 (첫 번째 옵션과 동일) 루트가 아닙니다.

1
@ user69817-반대로, locate는 디스크를 검색하지 않으며, 보통 cron을 통해 하루에 한 번 채워지는 locate 데이터베이스를 조사합니다.
tink

1

예를 들어 별표 / 와일드 카드 ( *)를 사용하여 위치에서 파일을 검색하는 경우 : 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})
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.