命令\;
中 的含义是什么 ?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
名为 的文件等执行命令-exec
。mv