如何使用bash中的find递归过滤掉dotfiles?

时间:2011-02-06 22:20:15

标签: bash find dotfiles

我搜索的范围很广,但似乎无法找到这个看似简单问题的答案!

我有一个包含一些dotfiles的目录(它们恰好是.git,但很容易就是.svn,甚至可能是其他东西)和一些非dotfiles。我正在搜索一个通用函数,它将列出此目录的所有子目录,除了以句点.开头的那些子目录。

我认为这是find . -type d的一些变体,但我已经尝试了几种咒语并做空。

这样的东西
def find_files(listing, dir):
    for entry in listdir(dir):
        if isdir(entry) and does_not_begin_with_dot(entry):
            listing.append(entry)
            find_files(listing, entry)

(很惊讶没有人问过这个问题 - 也许还有一种我没有看到的更糟糕的方式?)

3 个答案:

答案 0 :(得分:4)

find . -type d | grep -v '/\.'

...或...

find . -type d -a ! -name '.?*' -o -name '.?*' -a ! -prune

答案 1 :(得分:2)

尝试一下:

find . -mindepth 1 -name '.*' -prune -o \( -type d -print \)

答案 2 :(得分:0)

我不确定这是否是您想要的,但是以递归方式列出bash中的所有子目录我通常会做类似的事情

ls -R | grep /

比我尝试的一些找到的选项快得多。缺点是使用ls我最后会得到额外的冒号,但对我来说情况并非如此。

//编辑好的,我尝试了其他人从这里找到答案,他们工作得很快......但是他们比ls更难记住。 :)