find의 차이점은 무엇입니까? 를 찾으십시오. -인쇄


27

차이점은 무엇입니까?

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

답변:


41

로부터 findutils find :

식이 제공되지 않으면식이 -print사용되지만 -print0어쨌든 대신 사용하는 것이 좋습니다.

( -printA는 find식).

POSIX 문서가 이 확인 :

표현 이 없으면 -print를 표현으로 사용한다.

따라서 find .정확히 find . -print; 첫 번째는 표현식이 없으므로 -print내부적으로 추가됩니다.

-print맨 페이지에서 추가 내용에 대한 설명은 다음과 같습니다.

-print

참된; 표준 출력에 전체 파일 이름을 인쇄 한 다음 줄 바꾸기를 인쇄하십시오. find의 결과를 다른 프로그램으로 파이프하고 있고 검색중인 파일에 줄 바꿈이 포함될 가능성이 가장 희박한 경우 -print0대신 대신 옵션 사용을 고려해야합니다 -print. 파일 이름에서 특이한 문자를 처리하는 방법에 대한 정보는 비정상적인 파일 이름 섹션을 참조하십시오.


초보자 수준의 질문이지만 당신이 말하는 표현은 무엇입니까? 이 정규식입니까?
Rishi Prakash

2
@Rishi는 맨 페이지를 참조하십시오 .
Stephen Kitt

20

-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 .
find . -print

그러나 이것은 표준이 아니므로 피하는 것이 가장 좋습니다.

스펙트럼의보다 장황하고 유용한 끝 부분에서 일부 find구현 -f에서는 다음과 같이 옵션 에 대한 파일 경로를 인수로 전달할 수도 있습니다 .

find -f "$file1" -f "$file2" -print

find임의의 파일 경로를로 전달할 수 있는 유일한 구현입니다 find. 다른 구현은 !or -print... 와 같은 파일 경로를 허용 할 수 없으므로 find "$file" -print(또는 심지어 find -- "$file" -print)는 술어 $file의 이름 find(또는 첫 번째 경우의 옵션 ) 이 아니라고 가정합니다 .

불행히도 그것은 표준도 아니고 휴대용도 아닙니다.


비표준이고 피하는 것이 가장 좋은 이유는 무엇입니까?
Isaac

@Isaac, 편리하고 오타가있을 수 있기 때문에 ...
vonbrand

8

그들은 동일하며 현재 디렉토리에서 전체 디렉토리 계층을 작성합니다.

에서 POSIX 찾기 문서 :

다음 명령은 동일합니다.

찾기

찾기 -인쇄


4

Linux에서는 차이가 없지만 -print화면에 명령 출력을 표시하려면 다른 시스템 (예 : AIX)이 필요 합니다.


3
그것은 아주 오래된 AIX 버전 일 것입니다. AIX 4.3 find은 필요하지 않습니다. AIX는 수십 년 동안 POSIX를 준수했습니다.
Stéphane Chazelas

3

수년 동안 find 명령에는 기본 동작이 없었습니다. 일반적인 오류는 find 명령에 -print 옵션을 추가하는 것을 잊었습니다. 나는 아직도 오늘날까지 습관에서 빠져 나옵니다.

그러나 어떤 점에서 그렇게 이제 기본 작업으로 추가되었습니다 find .find . -print동일합니다.


1

-print다른 작업을 수행 할 때 명시 적 으로 사용하는 것이 유용하여 해당 작업이 수행 될 때 파일 이름이 표시됩니다.

find . -print -delete

~와 비슷할 것입니다

rm -rfv *

어디에 -print해당합니다 -v. 포함하지 않으면 -print파일 이름이 표시되지 않습니다.

그런데 rm명령을 더 비슷하게 만들려면 먼저이 Bash 명령을 실행하십시오.

shopt -s dotglob

어느 것 *매치 점 (숨겨진) 파일을.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.