是什么意思 ”\;”在“查找”命令中?

是什么意思 ”\;”在“查找”命令中?

命令\; 中 的含义是什么 ?find使用它的理由是什么?

在手册中我可以找到示例:

find . -type f -exec file '{}' \;

为什么不: find . -type f -exec file '{}'

答案1

find命令必须有一种方式来告诉应该执行的命令在哪里-exec结束。如果没有;命令末尾的 ,find将不知道命令在哪里结束以及(可能)其他find标志在哪里继续。

basename一个在所有文件和ls所有目录上执行的无意义示例:

find . '(' -type f -exec basename {} ';' ')' -o '(' -type d -exec ls {} ';' ')'

如果没有;上述,find就不知道是否要执行basename /some/path等等basename /some/path ')' -o '(' ...

引用或转义 the;只是为了让 shell 不会将其视为命令分隔符。

一个不太无意义的示例,首先将.txt文件复制到特定目录,然后通过附加.done其名称来重命名原始文件(如果复制成功):

find . -type f -name '*.txt'
    -exec cp {} /some/path/dest ';' \
    -exec mv {} {}.done ';'

(请注意,正如 Eliah Kagan 在评论中指出的那样,该结构{}.done严格来说是不可移植的,但是实施定义。实现可以选择不将{}字符扩展为当前路径名,也可以选择。根据我的经验,所有find实现{}即使与像这样的另一个字符串连接,也会扩展为当前路径名。)

如果没有;前面示例中的 ,find我们将不知道我们是否要cp对找到的文件以及/some/path/dest名为 的文件等执行命令-execmv

相关内容