경로가 지정되지 않은 경우 find
결과가 인쇄되는 이유 는 무엇입니까?./
$ find
./file1
./file2
./file3
인쇄하지 않는 이유는 무엇입니까?
$ find
file1
file2
file3
답변1
이것이유이 메시지가 표시되는 이유는 GNU 개발자 때문입니다.find
선택됨"합리적인" 행동 제공find
경로가 지정되지 않은 경우. 대조적으로,POSIX이 매개변수가 선택사항이라는 선언은 없습니다.
이것
find
유틸리티는 디렉토리 계층 구조에서 반복적으로 내려와야 합니다.경로로 지정된 각 파일, OPERANDS 섹션에 설명된 기본 색상으로 구성된 부울 표현식은 발견된 각 파일에 대해 평가됩니다. 각 경로 피연산자는 후행을 포함하여 제공된 대로 평가되어야 합니다.<slash>
문자, 계층 구조에서 발견되는 다른 파일에 대한 모든 경로 이름에는 다음이 포함되어야 합니다.종속현재 경로 피연산자,<slash>
현재 경로 피연산자가 1로 끝나지 않으면 파일 이름은 경로 피연산자를 기준으로 합니다. 관련 부분에는 점 또는 점-점 구성 요소가 포함되어서는 안 되며, 후행 부분도 포함되어서는 안 됩니다.문자, 단 하나의 문자<slash>
경로 이름 구성 요소 사이의 문자입니다.
각 프로필의 차이점을 확인할 수 있습니다. GNU는(관례에 따라) 대괄호 안의 선택 항목:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...]
[expression]
그리고 POSIX는 선택 사항일 수 있음을 나타내지 않습니다.
find [-H|-L] path... [operand_expression...]
GNU 프로그램에서 이것은ftsfind.c
:
만약(널) { /* * 일부 작업이 수정되므로 여기서는 임시 변수를 사용합니다. * 임시 경로. 따라서 문자열 상수를 사용하면 * 코어 덤프를 얻습니다. 가장 좋은 예는 다음과 같습니다. * "find -printf %H"(참고, "find .-printf %H"가 아님). */ char 기본 경로[2] = "."; return find(defaultPath); }
그리고 문자 그대로의 의미"."
단순화를 위해 사용됩니다. 그러면 같은 결과를 보게 될 것입니다
find
그리고
find .
왜냐하면 (그리고 POSIX도 동의함)길결과 앞에 붙는 데 사용됩니다(위 참조).종속).
조금만 노력하면 이 기능이 언제 처음 추가되었는지 확인할 수 있습니다."findutils"는 1996년에 처음 만들어졌습니다.(바라보다 find.c
):
+ /* If no paths are given, default to ".". */
+ for (i = 1; i < argc && strchr ("-!(),", argv[i][0]) == NULL; i++)
+ process_top_path (argv[i]);
+ if (i == 1)
+ process_top_path (".");
+
+ exit (exit_status);
+}
find 3.8의 변경 로그에서 이것은 분명히 다음과 같습니다.
Sat Dec 15 19:01:12 1990 David J. MacKenzie (djm at egypt)
* find.c (main), util.c (usage): Make directory args optional,
defaulting to "."
답변2
특히 ./
파일 이름이 -
.로 시작하는 경우 후속 명령은 해당 파일 이름을 옵션으로 해석할 수 있습니다. ./
이러한 상황은 방지됩니다.
예를 들어, 다음 파일이 포함된 디렉터리를 생각해 보세요.
$ ls
--link --no-clobber
이제 ./
접두사 없이 파일 이름이 제공되면 이 명령이 어떻게 작동할지 상상해 보세요.
$ find -type f -exec cp -t ../ {} +
문제 find
자체를 사용하여 설명할 수 있습니다. 위와 같은 디렉토리에서 실행해 보겠습니다. 다음은 작동합니다:
$ find ./*
./--link
./--no-clobber
다음은 실패합니다.
$ find *
find: unknown predicate `--link'
Try 'find --help' for more information.
답변3
이 find
명령에는 검색 경로가 필요합니다. 아무것도 지정하지 않으면 현재 디렉터리(.
)를 시작점으로 삼았습니다. 마찬가지로, 예를 들어 경로를 전달하면 /tmp
해당 경로가 시작점으로 처리됩니다. 결과도 마찬가지다.
현재 디렉터리인 경우:
$ find
or
$ find .
output:
./file1
./file2
./file3
디렉토리 인 경우 /tmp
:
$ find /tmp
output:
/tmp/file4
/tmp/file5
abc
디렉터리가 현재 디렉터리에 있는 경우 :
$ find abc
output:
abc/file6
abc/file7
현재 디렉터리 아래에 여러 디렉터리가 있는 경우:
$ find fu bar
output:
fu/file10
fu/file11
bar/file8
bar/file9
답변4
경로를 지정하지 않으면 find
명령은 ${PWD}
경로를 가정하고 출력에 인쇄합니다. 사용자가 경로를 지정하지 않아도 find
작업 방식이 변경되지 않습니다. 기본적으로 찾기는 항상 경로에서 작동합니다.