find -maxlength 0이 나에게 어떤 출력도 반환하지 않음

find -maxlength 0이 나에게 어떤 출력도 반환하지 않음

옵션을 사용하는 방법을 이해하려고 노력하고 있습니다 find -maxdepth 0.

아래 디렉토리 구조가 있습니다.

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

이제 find아래와 같이 명령을 실행합니다.

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

find위의 명령 중 어느 것도 사용하지 않으면파일1반환됩니다.

의 매뉴얼 페이지에서 find아래 정보를 볼 수 있습니다.

-maxlength 0은 명령줄 인수에만 테스트와 작업을 적용한다는 의미입니다.

옵션을 사용하여 몇 가지 예를 검색했지만 -maxdepth 0적절한 예를 찾을 수 없습니다.

find버전은,

find --version
find (GNU findutils) 4.4.2

-maxdepth 0누군가 나에게 어떤 사례 옵션이 유용할지 에 대한 조언을 제공해 줄 수 있습니까 ?

편집하다

아래 명령을 실행하면파일1두 번 상장됩니다. 이것이 이런 식으로 작동하도록 의도된 것입니까?

find . file1 -maxdepth 1 -name "file1"
./file1
file1

답변1

file1현재 디렉토리에 있다고 가정해 보겠습니다 . 그 다음에:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

이제 무엇인지 살펴 보겠습니다.문서상태:

-maxdepth 0 명령줄 인수에만 테스트와 작업을 적용한다는 의미입니다.

위의 첫 번째 예에서는 디렉토리만.명령줄에 나열됩니다. 부터.이름이 없으면 file1출력에 아무 것도 나열되지 않습니다. 위의 두 번째 예에서는 둘 다.및  file1명령줄에 나열되어 있으며, file1일치 하므로 -name "file1"출력에 반환되었습니다.

즉, ~ -maxdepth 0을 하라는 뜻이다~ 아니다디렉터리나 하위 디렉터리를 검색합니다. 대신 명령줄에 명시적으로 나열된 파일 중에서 일치하는 파일만 찾으세요.

귀하의 예에서는 명령줄에 디렉토리만 나열되었으며 이름이 지정되지 않았습니다 file1. 따라서 출력이 없습니다.

일반적으로 많은 파일과 디렉터리의 이름을 명령줄에서 지정할 수 있습니다. 예를 들어, 여기에서는 find명령줄에 9개의 파일과 디렉터리가 있는 명령을 시도해 보겠습니다 .

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 -maxdepth 0 -name "file1"
file1

겹치는 경로

고려하다:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

find에서는 명령줄에 지정된 각 경로를 따르고 경로가 에서와 같이 동일한 파일로 연결되거나 . file에서와 같이 경로가 정확히 중복되는 경우에도 일치하는 항목을 찾습니다 file1 file1.

답변2

디렉토리 내에서 파일(디렉토리 아님)을 비재귀적으로 찾으려면 다음을 사용하십시오.

find . -maxdepth 1 -type f -name "file1"
# ./file1

-maxdepth 0 검색하지 않습니다. NET Framework에서 인수로 제공한 파일/디렉터리 이름 중에서만 일치를 시도합니다 find.

예를 들어 위의 명령문에서 maxdepth값을 사용하여 일치하지 않는 것과 일치 0하려고 시도합니다 .file1.

하지만,와 조합하는 *대신 전달하면 bash가 일치 항목을 반환하는 현재 디렉터리의 파일 목록으로 대체됩니다 ..-maxdepth 0*

답변3

용법:

John1024는 좋은 예를 들었습니다.어떻게을 사용하므로 -maxdepth 0다음 정보만 추가합니다.언제그것을 사용하려면:

그렇다면 이유는 무엇입니까 -maxdepth 0? 이름을 알고 있다면 다음 명령을 실행하면 됩니다.

ls file-* 

글쎄요, 당신이 찾고 있는 이름이 아닐 수도 있습니다.

예:

touch file-{1..3}
echo "1" > file-1
touch -d @0 file-2

find * -maxdepth 0 -name "file-*" \( -size 1k -o -mtime +10000 \) -ls 
   669266     12 -rw-rw-r--   1 stefan   stefan          2 Mai  4 20:57 file-1
   669270      8 -rw-rw-r--   1 stefan   stefan          0 Jan  1  1970 file-2

file-*라는 이름 패턴으로 3개의 파일을 만듭니다. 그런 다음 아니오에 몇 가지 내용을 추가합니다. 1, 날짜를 다시 설정하세요. 2 그리고 아니오를 남겨주세요. 3 그대로.

이제 1000개의 파일에서 1k(1번) 또는 대략 30년 이상의 파일을 검색합니다. 예를 들어 3개의 파일 중 하나입니다.

그러나 find *는 현재 디렉토리에 있는 모든 파일을 검색하므로 단지 디렉토리에 대해 말하는 대신 "시작점"이라는 다소 낯선 매뉴얼 페이지 전문 용어가 사용됩니다. 내 생각에는 find의 강력한 필터 기능이 파일의 위치($PWD)를 알고 있지만 표준 쉘 도구를 사용하여 다른 속성을 쉽게 필터링할 수 없는 파일을 검색하기로 결정한 것 같습니다.

관련 정보