
옵션을 사용하는 방법을 이해하려고 노력하고 있습니다 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)를 알고 있지만 표준 쉘 도구를 사용하여 다른 속성을 쉽게 필터링할 수 없는 파일을 검색하기로 결정한 것 같습니다.