我仍在学习命令行,并且在完全理解 find 命令中通配符的使用方面遇到一些困难。
我正在目录 user/temp 中工作,并使用如下 find 命令来查找所有 .txt 文件:
find . -name *.txt -print
这给了我错误:
find: unknown primary or operator.
我知道您需要在 周围使用单引号,*.txt
以逃避扩展并获得您想要的结果;但是,我不明白为什么需要这样做。
我读到您必须转义*
以便find
在内部进行扩展。我很困惑,因为我认为使用单引号会使*
命令行不会将其解释为特殊字符,那么扩展是如何发生的呢?
答案1
这里有两个部分可以尝试扩展*
:调用时find
或find
处理/使用其参数时的 shell。
如果你不单引号它,shell 将扩展它,所以如果当前目录中有 a.txt 和 b.txt,你的命令行将从
find . -name *.txt -print
到
find . -name a.txt b.txt -print
这不是一个有效的find
命令
如果您单引号它,您将告诉 shell 不理会它,因此find
将获取该字符串*.txt
作为参数-name
,并在匹配潜在名称时使用它。
答案2
您可以尝试双引号文件名。
寻找 。 -名称“*.txt”-打印
这适用于我的系统(Debian 8)