디렉토리를 반복하려면 "찾기"를 사용하십시오. -깊이 1 -유형 d`

디렉토리를 반복하려면 "찾기"를 사용하십시오. -깊이 1 -유형 d`

실행할 스크립트가 있지만 호출하면 find . -depth 1 -type d다음 오류가 발생합니다.

find: paths must precede expression: `1'

이것은 실패한 라인입니다.

for dir in `find . -depth 1 -type d`
do
    ....

나는 성공하지 못한 채 많은 것을 시도했습니다. 적어도 나에게는 경로가 "1"보다 앞에 있기 때문에 오류가 발생하는 이유를 실제로 이해하지 못합니다.

답변1

그러나 이 -depth스위치는 매개변수를 사용하지 않으므로 -maxdepth does다음과 같습니다.

for dir in `find . -depth -maxdepth 1 -type d`
do
    ....

작동해야합니다.

-depth매뉴얼 페이지의 매개변수는 디렉토리 내용이 먼저 처리됨을 의미합니다.

답변2

이 명령은 findFreeBSD 버전(또는 유사한 버전)용으로 작성되었으며 지원되지 않는 다른 버전을 사용하고 있습니다. 오류 메시지에 따르면 GNU일 수 있습니다. FreeBSD 버전에는 두 가지 옵션이 있습니다(-depth n-depth매뉴얼 페이지):

-깊이
항상 true입니다. 이식 불가능한 -d 옵션과 동일합니다. find가 깊이 우선 순회를 수행하도록 합니다. 즉, 디렉토리를 마지막 순서로 방문하고 디렉토리의 모든 항목이 디렉토리 자체보다 먼저 실행됩니다. 기본적으로 find는 디렉토리에 순차적으로, 즉 내용 이전에 액세스합니다. 기본값은 너비 우선 순회가 아닙니다.

-lengthn
파일이 탐색 시작점을 기준으로 깊이 n에 있는 경우 참입니다.

첫 번째는 표준(*)이고 두 번째는 표준이 아닙니다. 표준은 인수를 취하지 않고 find 표현식 내 또는 뒤에 별도의 인수(경로)를 제공할 수 없기 때문에(보시다시피) FreeBSD 버전은 어느 정도 이름을 덮어쓰는 일을 피할 수 있습니다. (인수를 잊어버리면 -depth의미가 바뀌기 때문에 여전히 오류가 발생하기 쉽습니다 .)

GNU와 Busybox는 함께 사용하면 특정 깊이가 필요할 때 사용할 수 있는 동일한 비표준 기능을 가지고 있습니다.-mindepth n-maxdepth n

find . -mindepth 1 -maxdepth 1 -type d

for f in $(find ...)파일 이름에 공백이 포함되어 있으면 문제가 발생할 수 있으므로 이를 사용해서는 안 됩니다 .

바라보다:

(*텍스트에서 알 수 있듯이 -depth사전/사후 주문 전환에서는 이 이름이 정확하지 않습니다.)

관련 정보