재귀없이 찾기


246

find하위 디렉토리로 재귀하지 않는 방식으로 명령 을 사용할 수 있습니까? 예를 들어

DirsRoot
  |-->SubDir1
  |    |-OtherFile1
  |-->SubDir2
  |    |-OtherFile2
  |-File1
  |-File2

그리고 같은 결과는 find DirsRoot --donotrecuourse -type f오직 File1, File2?

답변:


380

-maxdepth 1현재 명령 구조에 따라 옵션으로 원하는 것을 얻을 수 있다고 생각합니다 . 그렇지 않은 경우에 대한 맨 페이지참조하십시오find .

관련 항목 (편의를 위해) :

-maxdepth levels
          Descend at most levels (a non-negative integer) levels of direc-
          tories below the command line arguments.   `-maxdepth  0'  means
          only  apply the tests and actions to the command line arguments.

옵션은 기본적으로 다음과 같습니다.

find DirsRoot/* -maxdepth 0 -type f #This does not show hidden files

또는:

find DirsRoot/ -maxdepth 1 -type f #This does show hidden files

OP의 예를 들어 이것이 이것이 필요하다고 생각합니다 -maxdepth 1.
Paul R

@Paul R : 사실, 그 종류는 숨겨진 파일을 처리하려는 방법에 달려 있지만 그럼에도 불구하고 내 대답을 수정했습니다. 그의 예 1는 아마도 그가 원하는 것입니다.
eldarerathis

1
나에게 파일을 -maxdepth 0표시 하지 않지만 -maxdepth 1숨겨진 파일도 표시되어 의도 한대로 작동합니다.
Bruce Wayne

1
@BruceWayne는주의 *의를 find DirsRoot/* -maxdepth 0 -type f. 제외하면 파일이 표시되지 않습니다.
mapeters

@ mook, 감사합니다.하지만이 문제가 있었던 원래 상황을 기억할 수 없습니다.
브루스 웨인

33

나는 당신이 찾고 있다고 생각합니다 -maxdepth 1.


1
OP의 예를 들어 이것이 이것이 필요하다고 생각합니다 -maxdepth 1.
Paul R

그렇습니다. 만약 그가 그의 예에서와 같이 정확하게 명령을 사용한다면 그것은 1 일 것입니다.
와플 역설

17

POSIX 호환 솔루션을 찾는 경우 :

cd DirsRoot && find . -type f -print -o -name . -o -prune

-maxdepth 는 POSIX 호환 옵션이 아닙니다.


이 솔루션에 감사드립니다. 그러나 이것을 단순화 할 수는 find DirsRoot/* -type f -prune없습니까?
dokaspar

@dokaspar 정말 좋은 질문입니다! ( -prunebtw 앞에 "-o"를 삽입하는 것을 잊어 버렸습니다 ) 대답은 아니요입니다. 왜 단순화 할 수 없는지 완전히 이해하려면, 방출 set -x하기 전에 명령을 내기 만하면 find DirsRoot/* -type f -o -prune바로 볼 수 있습니다. 근본 원인은 DirsRoot/*표현 의 쉘 확장의 한계입니다 .
sqr163

centos에서 작동하지 않고 여전히 출력에서 ​​전체 재귀를 수행합니다! 올바른 명령은find . -name . -o -prune
Reishin

어쨌든 DirsRoot를 원하는 경로로 유지하면서 Solaris에서는 cd가 필요하지 않습니다. 대신 DirsRoot /를 찾을 수 있습니다. -type f -print -o -name. 자두
spioter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.