하위 디렉터리를 탐색하지 않고 디렉터리에 있는 전체 쓰기 가능 파일을 나열하려면 find 명령을 어떻게 사용합니까?

하위 디렉터리를 탐색하지 않고 디렉터리에 있는 전체 쓰기 가능 파일을 나열하려면 find 명령을 어떻게 사용합니까?

이 문제에 대한 해결책은 몇 주 동안 나를 회피해 왔습니다. .-prune

나는 다양한 옵션을 시도했지만 이것만 남았습니다.

find / -type f -perm -2

그러나 이는 여전히 하위 디렉터리로 이동합니다. 명령 사용

find / -prune -type f -perm -2

결과도 나오지 않습니다. 이 문제가 어디에서 발생합니까?

답변1

대신 사용해 보세요 maxdepth N:

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

find $FOLDER -maxdepth 1 -perm -2

답변2

find / -type f -perm -2

이는 재귀적입니다. 그것이 바로 그 find일입니다.

find / -prune -type f -perm -2

여기에서는 찾은 모든 것에 find적용하도록 지시하고 있습니다 . -prune조건과 작업은 왼쪽에서 오른쪽으로 처리됩니다. 이전에는 조건이 없으므로 -prune무조건 적용됩니다. 따라서 가장 먼저 찾은 것은 find명령줄 인수이며 여기에 적용되었으므로 /디렉터리 의 내용을 순회하지 않습니다. 다음 조건과 일치하지 않으므로 인쇄되지 않습니다.-prunefind/

최상위 디렉토리의 항목만 처리하려면 -prune해당 디렉토리에 적용해야 합니다.명령줄 인수를 제외하고. 이를 수행하는 이식 가능한 방법은 /.명령줄에 전달된 경로 끝에 을 사용하는 것입니다. 이로 인해 find해당 이름이 로 처리 되므로 일치하는 데 .사용할 수 있습니다 . -name .재귀 순회에서는 .이 이름이 예약되어 있으므로 파일이 호출되지 않습니다. 이제 세 가지 경우가 있습니다.

  • 최상위 디렉토리: 재귀.
  • 다른 디렉터리: 반복하지 마세요.
  • 누구나 쓸 수 있는 일반 파일: 인쇄.

여러 가지 다른 동작을 지정하려면 -o("or") 연산자를 사용하세요. 모든 조건이 일치하는 첫 번째 항목이 적용됩니다.

find /. -name . -o -type d -prune -o -type f -perm -2 -print

의 일부 버전에서는 find쓰기가 가능 find / -name / -o -type d -prune -o …하지만 일부 버전에서는 쓰기가 허용되지 않습니다(예: BusyBox).

일부 버전의 find지원 옵션 -mindepth-maxdepth재귀 순회를 제한합니다. 찾기가 이를 지원하는 경우 대신 이를 사용할 수 있습니다 -prune.

find / -mindepth 1 -maxdepth 1 -type f -perm -2

( -mindepth그리고 -maxdepth전역 옵션이며 조건 및 작업 부분은 -type f -perm -2암시적 후행 입니다 -print.)

관련 정보