无法理解find命令的语法
在使用find命令时无法理解命令语法的原因是,find命令中的字符串{}
会被当前文件的路径名所替代。分号用于终止由find实用程序调用的shell命令。为了避免被shell解释,分号需要进行转义或引用,因为分号是shell使用的特殊字符之一(列表操作符)。您可以参考以下链接查看更多信息:为什么在find命令的-exec选项中需要使用反斜杠和分号?
解决此问题的方法是,需要在使用分号之前对其进行转义或引用。这样,shell将不会对分号进行解释,而是将其作为find命令的一部分。以下是一个示例:
find /path/to/directory -type f -exec command \;
在上述示例中,通过在分号前添加反斜杠进行转义,确保了分号不会被shell解释。这样,find命令就能正确执行,并将当前文件的路径名传递给指定的命令。
通过使用转义或引用分号,您可以解决在find命令中无法理解命令语法的问题。这样,您就可以正确地使用find命令,并在需要时将其与其他命令结合使用。
在上述代码中,-exec命令后面可以跟随任意数量的参数,这些参数组成了要在找到的每个文件上执行的命令。需要有一种方式来识别最后一个参数。这就是\;的作用。注意,在-exec开关之后可能会跟随其他内容:
find euler/ -iname "*.c*" -exec echo {} \; -or -iname "*.py" -exec echo {} \;
(这个命令在euler目录中找到所有的C文件和Python文件。)
exec不需要将整个命令放在引号中的原因是,在大多数情况下,这将需要在命令中转义大量的引号。
问题的出现原因是无法理解find命令的语法。解决方法是将-exec switch后面的命令参数用引号包裹起来,这样就可以正确地解析命令语法。例如:
find euler/ -iname "*.c*" -exec echo '{}' \; -or -iname "*.py" -exec echo '{}' \;
这样,find命令就能正确执行,而不会出现语法错误。