在这个命令中:
find . -name \*.pyc -delete
Run Code Online (Sandbox Code Playgroud)
为什么之前需要反斜杠*.pyc?
dev*_*ull 19
一个未加引号的 glob 会在find执行之前被shell 展开。(请参阅手册中的文件名扩展。)
所以说:
find . -name *.pyc -delete
Run Code Online (Sandbox Code Playgroud)
实际上会执行:
find . -name file1.pyc file2.pyc file3.pyc -delete
Run Code Online (Sandbox Code Playgroud)
假设当前目录中有 3 个 .pyc 文件并导致错误。
反斜杠使 shell 将 glob 传递给find,即它就像*.pyc被引用一样。
理想情况下,您应该引用一个全局变量:
find . -name '*.pyc' -delete
Run Code Online (Sandbox Code Playgroud)
在你的 shell 发出find命令之前,它会进行各种扩展。这样做时,它还处理特殊字符(或具有特殊含义的字符),其中*是通配符 \xe2\x80\x93\xc2\xa0a 通配符。这就是所谓的文件名扩展。
假设您的目录中有两个文件:
\n\nfoo.pycbar.pyc然后*.pyc将扩展到两个名称。所以如果你写:
find . -name *.pyc -delete\nRun Code Online (Sandbox Code Playgroud)\n\n那么 shell 实际上会调用:
\n\nfind . -name foo.pyc bar.pyc -delete\nRun Code Online (Sandbox Code Playgroud)\n\n这没有多大意义,因为你只能有一个论据-name。这就是为什么您需要转义特殊字符以防止它被 shell 解释。您可以通过反斜杠转义或引用它来做到这一点。