비재귀적으로 "찾기"를 사용하시나요?

비재귀적으로 "찾기"를 사용하시나요?

/bin/find /root -name '*.csv'반환 값을 사용하십시오 .

/root/small_devices.csv
/root/locating/located_201606291341.csv
/root/locating/located_201606301411.csv
/root/locating/g_cache.csv
/root/locating/located_201606291747.csv
/root/locating/located_201607031511.csv
/root/locating/located_201606291746.csv
/root/locating/located_201607031510.csv
/root/locating/located_201606301412.csv
/root/locating/located_201606301415.csv
/root/locating/located_201607031512.csv

실제로 아래의 모든 파일을 원하지 않으므로 /root/locating/예상되는 출력은 입니다 /root/small_devices.csv.

비재귀적으로 "찾기"를 사용하는 효율적인 방법이 있습니까?

필요한 경우 CentOS를 사용하겠습니다.

답변1

-maxdepth이를 수행하려면 다음 옵션을 사용할 수 있습니다 .

/bin/find /root -maxdepth 1 -name '*.csv'

주석에서 언급했듯이 -mindepth 1출력에서 ​​시작점을 제외하기 위해 추가되었습니다. 에서 man find:

-최대 깊이 수준

시작점 아래로 내려가는 대부분의 수준(음수가 아닌 정수) 디렉터리 수준입니다. -maxdepth 0이는 테스트와 작업이 시작점 자체에만 적용된다는 의미입니다.

-최소 깊이 수준

레벨(음수가 아닌 정수)보다 낮은 레벨에서는 테스트나 연산을 적용하지 마십시오.
-mindepth 1시작점을 제외한 모든 파일의 처리를 나타냅니다.

답변2

표준 find:

find /root ! -path /root -prune -type f -name '*.csv'

이렇게 하면 검색에서 디렉터리 자체를 제외한 모든 디렉터리가 /root제거(삭제) 되고 ./root*.csv

GNU 사용 find(및 기타 find구현 이해 -maxdepth):

find /root -maxdepth 1 -type f -name '*.csv'

경로를 자르려면 다음을 수행하십시오 /root/locating.

find /root -path /root/locating -prune -o -type f -name '*.csv' -print

이제 /root특정 하위 디렉터리를 제외한 모든 하위 디렉터리가 입력됩니다 /root/locating.

-maxdepth이 옵션을 사용하여 이 작업을 수행 할 수는 없습니다 .

답변3

-maxdepth다음과 같은 -mindepth기본 색상을 사용할 수 있습니다 .

find /root -maxdepth 1 -mindepth 1 -name '*.csv'

그리고FreeBSDfind-depth 1(macOS에서 사용) 대신 사용하고 싶을 수도 있지만 -maxdepth 1 -mindepth 1이는 비효율적입니다.스티븐 차제라스 아래 댓글, " 1보다 큰 깊이의 디렉토리로 내려가는 것을 depth 1멈추지 않습니다 . "find-maxdepth 1암소 비슷한 일종의 영양find지원하지 않습니다.-depth n

관련 정보