find . -name "*.html" -exec grep -l somethingtobefound {} \;
"-name" "-exec" "-l" "{}" "\" 및 ";" 키워드가 무엇을 의미하는지 궁금합니다.
또한 많은 상황에서 단일 대시 "-" 대신 이중 대시 "--"가 사용되는 경우를 자주 봅니다. 서로 바꿔서 사용할 수 있는지, 그리고 그 의미가 무엇인지 알고 싶습니다. 감사합니다!
답변1
이것은 배쉬 문제가 아닙니다.그 자체-- 이 명령의 모든 내용은 유닉스 find(1) 명령에 대한 인수 세트로, 어떤 쉘에서 호출하든 동일하게 작동합니다.
이를 감안할 때 실제로 해야 할 일은 find(1)에 대한 문서를 확인하는 것입니다. 다음을 실행하여 이를 수행할 수 있습니다.
$ man find
또는 find 버전이 Gnu 버전(Linux를 실행하는 경우 Gnu 버전)인 경우,
$ info find
좀 더 책 같은 문서를 위해.
두 번째 질문: 많은 명령(특히 Gnu 프로젝트에 속하는 명령)은 다음 형식의 긴 옵션 플래그를 사용합니다.
$ command --long-argument --other-long-argument
공식적인 짧은 주장에 대한 대안으로
$ command -lo
또는
$ command -l -o
. 이를 수행하는 명령은 해당 플래그 시작 부분에 "-" 대신 "--"를 사용하여 어떤 유형의 옵션 플래그가 나타날지 명확하게 합니다.
답변2
이 컨텍스트에서는 ".html"로 끝나는 결과를 찾기 위해 결과를 필터링하도록 명령에 -name
지시 하고 결과와 함께 실행하도록 명령에 지시합니다 .find
-exec
find
grep
-l
명령 에 적용되며 grep
패턴(예: )과 일치하는 첫 번째 입력 파일의 파일 이름을 인쇄하고 스캔을 중지해야 함을 나타냅니다. 해당 페이지 somethingtobefound
에 따르면 현재 파일의 경로 이름을 전달 하고 명령을 종료해야 합니다.man
{}
find
\;
이중 대시와 단일 대시의 경우 이는 프로그램에 따라 달라지며 특별한 의미가 없어야 합니다. 즉, 일반적으로 긴 매개변수(예: --show-results
)와 단일 문자 매개변수(예: ) 앞에 이중 대시가 표시되는 경향이 있습니다 -s
.
답변3
대답은 man find를 통해 찾을 수 있습니다.
`
-name pattern
Base of file name (the path with the leading directories
removed) matches shell pattern pattern. The metacharacters
('*', '?', and '[]') match a '.' at the start of the base name
(this is a change in findutils-4.2.2; see section STANDARDS CON‐
FORMANCE below). To ignore a directory and the files under it,
use -prune; see an example in the description of -path. Braces
are not recognised as being special, despite the fact that some
shells including Bash imbue braces with a special meaning in
shell patterns. The filename matching is performed with the use
of the fnmatch(3) library function. Don't forget to enclose
the pattern in quotes in order to protect it from expansion by
the shell.
-exec command ;
Execute command; true if 0 status is returned. All following
arguments to find are taken to be arguments to the command until
an argument consisting of ';' is encountered. The string '{}'
is replaced by the current file name being processed everywhere
it occurs in the arguments to the command, not just in arguments
where it is alone, as in some versions of find. Both of these
constructions might need to be escaped (with a '\') or quoted to
protect them from expansion by the shell. See the EXAMPLES sec‐
tion for examples of the use of the -exec option. The specified
command is run once for each matched file. The command is exe‐
cuted in the starting directory. There are unavoidable secu‐
rity problems surrounding use of the -exec action; you should
use the -execdir option instead.
등.
답변4
매개변수 -name
및 -exec
는 "검색할 파일 또는 디렉터리 이름 패턴"과 "실행"을 나타냅니다.무엇일치하는 각 결과 파일 또는 디렉터리에서".는 {}
패턴과 일치하는 결과로 대체 되므로 명령문 -name
에서 -exec
이를 명령 실행을 위한 인수로 사용할 수 있습니다. 백슬래시는 \;
find 명령의 끝을 나타냅니다. 이중 대시는 --
일반적으로 긴 옵션을 나타냅니다(예: ls --all
및 단일 대시는 -
짧은 옵션(예 ls -a
: 정확히 동일한 의미를 가짐)을 나타냅니다.