使用 find 命令和通配符进行内部扩展

使用 find 命令和通配符进行内部扩展

我仍在学习命令行,并且在完全理解 find 命令中通配符的使用方面遇到一些困难。

我正在目录 user/temp 中工作,并使用如下 find 命令来查找所有 .txt 文件:

find . -name *.txt -print

这给了我错误:

find: unknown primary or operator.

我知道您需要在 周围使用单引号,*.txt以逃避扩展并获得您想要的结果;但是,我不明白为什么需要这样做。

我读到您必须转义*以便find在内部进行扩展。我很困惑,因为我认为使用单引号会使*命令行不会将其解释为特殊字符,那么扩展是如何发生的呢?

答案1

这里有两个部分可以尝试扩展*:调用时findfind处理/使用其参数时的 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)

相关内容