find 命令末尾的“\;”和“+”有什么区别?

the*_*777 6 bash find command-line-interface

这些是用于将制表符转换为空格的 bash 命令。这是原始 stackoverflow 帖子的链接。

这个\;在命令末尾使用

find /path/to/directory -type f -iname '*.js' -exec sed -ie 's|\t|    |g' '{}' \;
Run Code Online (Sandbox Code Playgroud)

这个使用+而不是\;.

find /path/to/directory -type f -iname '*.js' -exec sed -ie 's|\t|    |g' '{}' '+'
Run Code Online (Sandbox Code Playgroud)

两者到底有什么区别?

Kei*_*son 13

or与 bash 无关\;+它是命令的参数find,特别是finds-exec选项的参数。

find -exec用于{}将当前文件名传递给指定的命令,并\;标记命令参数的结尾。之所以需要它\,是因为;它本身对于bash 来说是特殊的;通过输入\;,您可以传递一个文字;字符作为参数。(您也可以键入';'";"。)

+符号(\不需要,因为+对于 bash 来说并不特殊)会导致find使用多个参数而不是仅调用一次指定的命令,其方式类似于xargs

例如,假设当前目录包含 2 个名为abc和的文件xyz。如果您输入:

find . -type f -exec echo {} \;
Run Code Online (Sandbox Code Playgroud)

它调用该echo命令两次,产生以下输出:

./abc
./xyz
Run Code Online (Sandbox Code Playgroud)

如果您改为输入:

find . -type f -exec echo {} +
Run Code Online (Sandbox Code Playgroud)

然后仅find调用echo一次,输出如下:

./xyz ./abc
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请键入info findman find(如果您的系统上安装了文档),或者您可以在线阅读手册:http://www.gnu.org/software/findutils/manual/html_node/find_html/