为什么在“find”中的星号前有一个反斜杠?

为什么在“find”中的星号前有一个反斜杠?

在此命令中:

find . -name \*.pyc -delete

为什么前面需要一个反斜杠*.pyc

答案1

find未加引号的 glob 将在执行前被 shell 展开。(请参阅文件名扩展在手册中。

俗话说:

find . -name *.pyc -delete

实际上会执行:

find . -name file1.pyc file2.pyc file3.pyc -delete

假设当前目录中有 3 个 .pyc 文件,但结果却出现错误。

反斜杠使 shell 将 glob 传递给find,即,它就像*.pyc被引用一样。

理想情况下,你应该引用一个 glob:

find . -name '*.pyc' -delete

答案2

在 shell 发出find命令之前,它会执行各种操作扩展。这样做时,它还会处理特殊字符(或具有特殊含义的字符),其中*是通配符 - 通配符。这就是所谓的文件名扩展。

假设你的目录中有两个文件:

  • foo.pyc
  • bar.pyc

然后*.pyc会扩展为两个名称。因此,如果你写:

find . -name *.pyc -delete

那么 shell 实际上会调用:

find . -name foo.pyc bar.pyc -delete

这没什么意义,因为 只能有一个参数-name。这就是为什么你需要转义特殊字符以防止它被 shell 解释的原因。你可以使用反斜杠转义,或者用引号引起来。

相关内容