使用GNU find命令忽略/修剪隐藏的目录

时间:2010-02-01 02:19:36

标签: bash

使用find命令时,为什么在匹配其他所有内容时,以下内容将成功忽略隐藏目录(以句点开头):

find . -not \( -type d -name ".?*" -prune \)

但这根本不匹配:

find . -not \( -type d -name ".*" -prune \)

唯一的区别是问号。后一个命令不应该同样检测和排除以句点开头的目录吗?

2 个答案:

答案 0 :(得分:8)

后一个命令修剪所有东西,因为它修剪. - 尝试这些来看看差异:

$ ls -lad .*
.
..
.dotdir
$ ls -lad .?*
..
.dotdir

您看到在第二个中,.未包括在内,因为它只有一个字符长。 glob“.?*”仅包含至少两个字符长的文件名(点,加上任何单个字符,非可选,加上任何零个或多个字符的序列)。

顺便说一下,find不是Bash命令。

答案 1 :(得分:1)

后一个命令修剪.本身 - 您正在运行find的目录 - 这就是它不会产生任何结果的原因。