为什么在`find`中的星号前加反斜杠?


Answers:


19

未引号的glob将在find执行之前由外壳程序进行扩展。(请参阅手册中的“ 文件名扩展 ”。)

所以说:

find . -name *.pyc -delete

实际上会执行:

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

假设当前目录中有3个.pyc文件,则会导致错误。

反斜杠使外壳将glob传递给find,即,其作用就像*.pyc被引用一样。

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

find . -name '*.pyc' -delete

@RamRachum,但键入时要输入更多字符。
Paul Draper 2014年

1
@PaulDraper可读性强,不易出错>
只需

单引号是必经之路。我什至从未想到您可以通过这种方式使用反斜杠...
弗洛里斯(Floris)

4

在shell发出find命令之前,它将进行各种扩展。这样做还可以处理特殊字符(或具有特殊含义的字符),其中*是通配符–浮点字符。这就是所谓的文件名扩展。

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

  • foo.pyc
  • bar.pyc

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

find . -name *.pyc -delete

那么外壳实际上会调用:

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

这没有什么意义,因为您只能为设置一个参数-name。这就是为什么您需要转义特殊字符以防止Shell解释它。您可以通过反斜杠转义或引用它来实现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.