이 문제에 대한 해결책은 몇 주 동안 나를 괴롭혔습니다. .-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
.)