
차이점이 뭐야:
find .
그리고
find . -print
실제로는 무엇을 합니까 -print
?
$ find .
.
./hello.txt
./hello
./hello/txt
./hello/hello2
./hello/hello2/hello3
./hello/hello2/hello3/txt
./hello/hello2/txt
$ find . -print
.
./hello.txt
./hello
./hello/txt
./hello/hello2
./hello/hello2/hello3
./hello/hello2/hello3/txt
./hello/hello2/txt
답변1
~에서findutils
find
맨페이지:
표현이 주어지지 않으면 표현은
-print0
어쨌든 반대로).
( -print
는find
표현하다.)
이것POSIX 문서이것을 확인했습니다:
그렇지 않다면표현하다존재하다,-인쇄표현으로 사용해야 합니다.
따라서 find .
완전히 동일합니다 find . -print
. 첫 번째 항목에는 표현이 없으므로 -print
내부적으로 추가됩니다.
-print
그 의미는 맨페이지에 자세히 설명되어 있습니다.
True이면 표준 출력에 전체 파일 이름을 인쇄하고 그 뒤에 개행 문자가 옵니다. find의 출력을 다른 프로그램으로 파이핑하고 있고 검색 중인 파일에 개행 문자가 포함될 가능성이 높다면 다음을 사용하는 것을 진지하게 고려해야 합니다.
-print0
대신 옵션
답변2
-print
기본값입니다행동. 일부 find
술어가 고려됩니다.행동상대적인필터또는상황. 예를 들어, -type f
작업이 아닙니다. -exec
조건으로 사용될 수도 있지만 작업입니다.
작업에는 -print
, -exec
및 가 포함됩니다 -ok
. 일부 구현에는 , , , ... find
와 같은 다른 비표준 작업 조건자가 있습니다 .-print0
-printf
-execdir
-okdir
-ls
find files <some-predicates>
그들 중 아무도 없습니다<some-predicates>
포함하다행동다음과 동일:
find files \( <some-predicates> \) -print
(위의 괄호에 주목하십시오. -o
이는 일부 연산자가 있는 경우 중요합니다).
-print
확실하지 않은 경우 명시적으로 사용하는 것이 좋습니다 (또는 출력을 후처리할 수 있도록 사용 가능한 -exec printf '%s\0' {} +
경우 ).-print0
기본 -print
작업은 POSIX에 의해 지정됩니다.일부 이전 find
구현에서는 명시적 요구 사항이 필요합니다.-print
, 그러나 이것들은 오늘날 야생에서는 일반적으로 발견되지 않습니다.
또한 일부 find
구현에서는 생략을 허용하며 files
, 이 경우 기본적으로 현재 디렉터리를 검색합니다. 즉, 그들에게는
find
find -print
동등하다
find .
find . -print
그러나 이는 표준이 아니므로 피하는 것이 가장 좋습니다.
보다 상세하고 유용한 규모에서 일부 구현에서는 다음과 같이 파일 경로를 옵션 find
에 대한 인수로 전달할 수도 있습니다 .-f
find -f "$file1" -f "$file2" -print
find
이는 임의의 파일 경로를 에 전달하는 것을 허용하는 유일한 것입니다 find
. 다른 구현에서는 !
또는 -print
... 과 같은 파일 경로를 허용할 수 없으므로 find "$file" -print
(심지어 find -- "$file" -print
) 이는 조건자(또는 첫 번째 경우 옵션)의 이름이 아닌 것으로 간주됩니다 $file
.find
불행하게도 이것은 표준도 아니고 이식성도 없습니다.
답변3
답변4
수년 동안 find 명령에는 기본 동작이 없었습니다. 일반적인 실수는 find 명령에 -print 옵션을 추가하는 것을 잊어버리는 것입니다. 나는 지금도 습관적으로 타자를 치고 있다.
그러나 어떤 시점에서는 기본 작업으로 추가되었으므로 이제 find .
와 find . -print
동일합니다.