Shell表示法:find . -type f -exec file '{}' \;

7 浏览
0 Comments

Shell表示法:find . -type f -exec file '{}' \;

这是一个相对简单的命令,如果已经存在重复并且有人可以指引我,那么很抱歉,我会删除或关闭这个问题。\nfind命令的man页\n

   find . -type f -exec file '{}' \;
   在当前目录及其子目录中的每个文件上运行'file'命令。请注意,花括号被单引号包围以保护它们免受解释为shell脚本标点的影响。
   分号同样也通过反斜杠进行保护,尽管在这种情况下可以使用';'。

\n我不明白符号\\;的意思。这到底是什么?

0
0 Comments

问题的原因是在find命令中,-exec后面跟着一个命令和该命令的参数。因为参数的数量是任意的,所以find需要一种方法来知道何时结束。分号就是告诉find它已经到达命令参数的结尾。

大多数情况下,shell会忽略分号。但是我们希望分号被传递给find命令。因此,我们使用反斜杠来转义它。这告诉shell将分号视为find命令的参数之一。

更进一步解释一下,为什么不假设exec命令的参数直接到行末呢?为什么我们需要标志exec命令参数的结束呢?原因是find有高级功能。举个例子,考虑以下命令:

find . -name '*.pdf' -exec echo Yes, we have a pdf: {} \; -o -exec echo No, not a pdf: {} \;

为什么find需要知道何时结束呢?-exec命令的参数是一个有限的列表,所以它不应该知道何时结束吗?

解决方法是使用反斜杠来转义分号,以确保分号被传递给find命令。这样find就知道何时结束命令的参数了。

0