하위 디렉토리를 탐색하지 않고 디렉토리에서 누구나 쓰기 가능한 파일을 나열하기 위해 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(즉, 명령줄 인수 /)이 -prune여기에 적용 되므로 find디렉터리의 내용은 탐색되지 않습니다. /다음 조건이 충족되지 않아 인쇄 되지 않습니다.

최상위 디렉터리의 항목만 처리하려면 -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.)

관련 정보