검색 파일 find *
과 의 차이점은 무엇입니까? find ~
터미널에서 현재 작업 디렉토리가 열리면 root
터미널에서
root@devils-ey3:~# find * -print -quit
~
같은 디렉토리에
root@devils-ey3:~# find ~ -print -quit
/root
하지만 변경하면 pwd
출력은 find ~ -print -quit
이전과 동일하지만 다른 출력은 변경됩니다. 파일 찾기는 무엇을 *
합니까?~
답변1
의 기본 형식 find
은
find WHERE WHAT
따라서 에서는 find *
로 *
간주됩니다 WHERE
. 이제 *
그것은 와일드카드입니다. 현재 디렉터리의 모든 항목과 일치합니다(기본적으로 로 시작하는 파일/디렉터리 제외 .
). Windows에 해당하는 것은 입니다 *.*
.*
확장하다이를 설명하기 위해 find
다음 디렉토리를 고려하십시오.
$ ls
file file2
set -x
디버그 정보를 활성화하고 명령을 실행 하면 find
다음이 표시됩니다.
$ find * -print -quit
+ find file file2 -print -quit
file
위에 표시된 것처럼 *
디렉터리의 모든 파일로 확장하면 실제로 실행되는 것은 다음과 같습니다.
find file file2 -print -quit
이므로 -quit
찾으라고 지정한 파일의 첫 번째 파일 이름을 인쇄하고 종료합니다. 귀하의 경우에는 이라는 파일이나 디렉토리가 있는 것으로 나타나서 ~
그것이 인쇄됩니다.
그러나 물결표( ~
)에는 특별한 의미도 있습니다. 이것은 귀하의 디렉토리에 대한 바로가기입니다 $HOME
:
$ echo ~
/home/terdon
따라서 find ~
루트로 실행 하면 ~
이는 로 확장 /home/root
되고 실제로 실행하는 명령은 다음과 같습니다.
# find ~ -print -quit
+ find /root -print -quit
/root
find
다시 말하지만, 특정 위치에서 파일이나 디렉터리를 검색하고 첫 번째 항목을 인쇄한 후 종료하라는 의미입니다 . 첫 번째로 일치하는 파일이나 디렉토리가 /root
그 자체이므로 이것이 인쇄됩니다.
답변2
먼저 다음 구문을 기억하세요 find
.
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
파일을 검색할 때 find *와 find ~의 차이점은 무엇입니까?
*
모든 것에 어울리는 while 카드입니다.여기에서는
find *
현재 디렉터리의 파일/디렉터리 목록과 검색할 대상 이름 목록을 전달합니다. 따라서 다음 파일과 이름이 같은 모든 파일을 찾습니다.pwd
-
따라서 (홈 디렉토리)
find ~
내에서 (재귀적으로) 파일과 디렉토리를 찾으십시오.~
root@devils-ey3:~# find * -print -quit ~
위 출력에는 이름이 지정된 파일이나 디렉터리가 있어야 합니다 ~
. /root
(~
as $HOME
디렉토리 와 혼동하지 마십시오.)
root@devils-ey3:~# find ~ -print -quit /root
설명하다 find ~ -print -quit
:-
매우 다양한 선택 -quit
::
-quit 즉시 종료합니다. 하위 프로세스는 계속 실행되지 않지만 경로는 더 이상 명령에 지정되지 않습니다. 라인이 처리됩니다. 예를 들어 find /tmp/foo /tmp/bar -print -quit는 /tmp/foo만 인쇄합니다. -execdir ... {} +로 빌드된 모든 명령줄은 find가 종료되기 전에 호출됩니다. 종료 상태는 오류 발생 여부에 따라 0일 수도 있고 아닐 수도 있습니다.
~
/root
루트 터미널에 있기 때문에 경로로 간주됩니다 .-quit
디렉토리 이름만 인쇄
하지만 비밀번호를 변경하면 find ~ -print -quit의 출력은 이전과 같습니다...
상술 한 바와 같이:-find ~ -print -quit
인쇄/root
경로가 ~
( /root
루트 쉘 때문에) 로 설정되고 -quite
.pwd