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