gpt4 book ai didi

bash - 使用 find 获取所有没有 .git 子文件夹的文件夹

转载 作者:行者123 更新时间:2023-11-29 09:46:01 24 4
gpt4 key购买 nike

如何使用 find 获取所有没有 .git 文件夹的文件夹?

在这个结构上::

$ tree -a -d -L 2
.
├── a
│ └── .git
├── b
│ ├── b1
│ └── b2
├── c
└── d
└── .git
├── lkdj
└── qsdqdf

这个::

$ find . -name ".git"  -prune -o -type d -print
.
./a
./b
./b/b1
./b/b2
./c
./d
$

获取除.git之外的所有文件夹

我想得到这个::

$ find . ...
.
./b
./b/b1
./b/b2
./c
$

最佳答案

它效率低下(运行一堆子进程),但以下将用 GNU 或现代 BSD find 完成工作:

find . -type d -exec test -d '{}/.git' ';' -prune -o -type d -print

如果您不能保证 find 具有 POSIX 标准中未保证的任何功能,那么您可能需要承担更多的效率损失(使 {} 它自己的标记,而不是子字符串,通过让 shell 运行测试):

find . -type d -exec sh -c 'test -d "$1/.git"' _ '{}' ';' -prune -o -type d -print

这通过使用 -exec 作为谓词来工作,运行 find 不支持内置的测试。

注意使用低效的 -exec [...] {} [...]\; 而不是更高效的 -exec [...] {} + ;由于后者将多个文件名传递给每次调用,它无法取回每个文件名的单个结果,因此始终评估为真。

关于bash - 使用 find 获取所有没有 .git 子文件夹的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45402286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com