这行 Bash 是什么意思?

这行 Bash 是什么意思?
find . -name "*.html" -exec grep -l somethingtobefound {} \;

我只是想知道关键字“-name”“-exec”“-l”“{}”“\”和“;”应该表示。

另外,我经常看到在很多情况下使用双破折号“--”而不是单破折号“-”。我想知道它们是否可以互换,以及它们的含义。谢谢你!

答案1

这不是一个bash问题本身-- 该命令中的所有内容都是 unix find(1) 命令的一组参数,无论您从哪个 shell 调用它,它的行为都是相同的。

鉴于此,您真正需要做的是查看 find(1) 的文档 - 您可以通过运行以下命令来做到这一点:

$ man find

或者,如果您的 find 版本是 Gnu 版本(如果您运行的是 Linux,则会如此),

$ info find

以获得更像书本的文档。

对于第二个问题:许多命令(特别是那些属于 Gnu 项目的命令)使用以下形式的长选项标志

$ command --long-argument --other-long-argument

作为形式短参数的替代

$ command -lo

或者

$ command -l -o

。这样做的命令将在此类标志的开头使用“--”而不是“-”,以明确即将出现哪种类型的选项标志。

答案2

在此上下文中,-name告诉find命令过滤结果以查找以“.html”结尾的结果,并-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 命令的结束。双破折号--通常表示长选项egls --all和单破折号-表示短选项eg ls -a,它们的含义完全相同。

相关内容