当使用find
命令,那为什么下面将成功地忽略隐藏目录(那些刚开始有一段时间),同时匹配一切:与GNU忽略/剪枝隐藏目录find命令
find . -not \(-type d -name ".?*" -prune \)
但这根本不匹配任何东西:
find . -not \(-type d -name ".*" -prune \)
唯一的区别是问号。不应该后者命令同样检测并排除以句点开头的目录吗?
当使用find
命令,那为什么下面将成功地忽略隐藏目录(那些刚开始有一段时间),同时匹配一切:与GNU忽略/剪枝隐藏目录find命令
find . -not \(-type d -name ".?*" -prune \)
但这根本不匹配任何东西:
find . -not \(-type d -name ".*" -prune \)
唯一的区别是问号。不应该后者命令同样检测并排除以句点开头的目录吗?
后者命令修剪一切,因为它修剪.
- 尝试这些看出区别:
$ ls -lad .*
.
..
.dotdir
$ ls -lad .?*
..
.dotdir
你看到的是,在第二个,.
不包括在内,因为它只有一个字符。 glob“.?*
”仅包含至少两个字符长的文件名(点,加上任何单个字符,非可选,以及任何零或多个字符的序列)。
顺便说一下,find
不是Bash命令。
“发现不是Bash命令” - 很好的调用,改变了标题以反映这个 – kostmo 2010-02-11 04:27:55
属于superuser.com – t0mm13b 2010-02-01 02:22:59
@tommie - 是吗?取决于它是交互式使用还是作为脚本的一部分使用;在后一种情况下,这可能是一个合理的软件开发问题。 – 2010-02-01 02:35:51
因所选答案中的“GNU find”的标题提及不相关而被低估。 – danorton 2013-03-06 18:20:27