命令'find -name'的[.]*和'.*'有什么区别?

Dav*_*cia 6 linux bash find

我的目标是在文件系统中查找以点 ( .)开头的所有文件或目录,例如.gnupg. 所以我想出了这个命令:

find -name '.*'
Run Code Online (Sandbox Code Playgroud)

在网上查了一下,看到一些提示说我应该[.]*改用作为-name选项的参数值。两种方法有什么区别,因为结果看起来一样?

Jos*_* R. 6

根本没有区别。如果你试试:

$ diff <(find -name '.*') <(find -name '[.]*')
Run Code Online (Sandbox Code Playgroud)

你没有输出。这意味着命令输出是相同的。我认为你是在断章取意地理解这个“暗示”。意图可能有所不同。

find手册页:

-name pattern
文件名的基础(删除了前导目录的路径)匹配 shell 模式模式。基本名称开头的元字符(*',?' 和[]') match a.' (这是 findutils-4.2.2 中的更改)

这意味着[]-name参数中被解释为一个字符类。除了里面什么都没有.,它匹配一个文字.,就好像你没有使用[].