代码之家  ›  专栏  ›  技术社区  ›  kostmo

使用gnu find命令忽略/删除隐藏目录

  •  10
  • kostmo  · 技术社区  · 14 年前

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

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

    但这根本不匹配:

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

    唯一的区别是问号。后一个命令是否也应该检测并排除以句点开头的目录?

    2 回复  |  直到 14 年前
        1
  •  9
  •   Dennis Williamson    14 年前

    后一个命令会删除所有内容,因为它会删除 . -尝试以下方法以了解不同之处:

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

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

    顺便说一句, find 不是bash命令。

        2
  •  2
  •   Charles Duffy    14 年前

    后一个命令修剪 . 本身——您正在运行的目录 find 反对——这就是为什么它不会产生任何结果。