이 Bash 라인은 무엇을 의미합니까?

이 Bash 라인은 무엇을 의미합니까?
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-execfindgrep

-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: 정확히 동일한 의미를 가짐)을 나타냅니다.

관련 정보