如何使用 bash 中的 find 递归过滤点文件?

发布于 2024-10-16 16:58:11 字数 567 浏览 4 评论 0原文

我进行了广泛的搜索,但似乎找不到这个看似简单的问题的答案!

我有一个目录,其中包含一些点文件(它们恰好是 .git 但很可能是 .svn 甚至可能是其他文件)和一些非点文件。我正在寻找一个通用函数,该函数将列出该目录的所有子目录,除了以句点.开头的子目录。

我认为这是 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)

(很惊讶没有人问这个——也许还有一种我没有看到的更猛烈的方式?)

I've searched far and wide but can't seem to find the answer to this seemingly simple question!

I have a directory that contains some dotfiles (they happen to be .git but the could easily be .svn and maybe even something else) and some non-dotfiles. I'm searching for a general function that will list all subdirectories of this directory, except the ones beginning with a period ..

I'm thinking it's some variant of find . -type d but I've tried several incantations and come up short.

Something like

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)

(Surprised nobody's asked this - maybe there's a more bash-ish way that I'm not seeing?)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

酒废 2024-10-23 16:58:11
find . -type d | grep -v '/\.'

...或...

find . -type d -a ! -name '.?*' -o -name '.?*' -a ! -prune
find . -type d | grep -v '/\.'

...or...

find . -type d -a ! -name '.?*' -o -name '.?*' -a ! -prune
也只是曾经 2024-10-23 16:58:11

尝试一下:

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

Give this a try:

find . -mindepth 1 -name '.*' -prune -o \( -type d -print \)
薄荷港 2024-10-23 16:58:11

我不确定这是否是您想要的,但是为了递归地列出 bash 中的所有子目录,我通常会执行类似

ls -R | grep /

Works 的操作,比我尝试过的某些查找选项要快得多。缺点是使用 ls 最后会得到额外的冒号,但对我来说不是这样。

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

I am not sure if this is what you want, but to recursively list all subdirectories in bash I usually do something like

ls -R | grep /

Works a lot faster than some find options I tried. The disadvantage is that using ls I get extra colon at the end, but that is not a case for me.

//edit Ok, I tried other find answers from here and they work quite fast... but they are harder to remember than ls. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文