首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何只匹配bash中的dotfiles?

如何只匹配bash中的dotfiles?
EN

Unix & Linux用户
提问于 2018-10-18 09:23:23
回答 5查看 1.2K关注 0票数 5

rm -rf .*不会因为rm拒绝删除...而可怕地结束。

如何从glob模式中排除这些特殊目录?

这不是由dotglob解决的,因为我只想匹配以点开头的文件,而不是所有文件。

EN

回答 5

Unix & Linux用户

回答已采纳

发布于 2018-10-18 10:00:09

使用bash时,设置GLOBIGNORE特殊变量是一些非空值,这足以使它在展开globs时忽略...。来自巴什博士

GLOBIGNORE shell变量可用于限制匹配模式的文件名集。如果设置了GLOBIGNORE,则匹配GLOBIGNORE中的模式之一的匹配文件名将从匹配列表中删除。如果设置了nocaseglob选项,则将执行与GLOBIGNORE中的模式的匹配,而不考虑情况。当设置.和null时,文件名..GLOBIGNORE总是被忽略。但是,将GLOBIGNORE设置为非空值具有启用dotglob选项的效果,因此以‘.‘开头的所有其他文件名都将匹配。

如果我们将其设置为.:..,则...都将被忽略。因为将其设置为任何非空值也会得到这种行为,所以我们最好将其设置为.

所以:

代码语言:javascript
复制
GLOBIGNORE=.
rm -rf .*

(来自我早些时候在问Ubuntu的问题上的回答.)

票数 4
EN

Unix & Linux用户

发布于 2018-10-18 09:29:10

这应该可以做到:

代码语言:javascript
复制
rm -rf .[^.] .??*  

此命令可以捕获所有情况。

.[^.]将捕获任意两个字符条目。.??*将只匹配3+字符文件名。

票数 4
EN

Unix & Linux用户

发布于 2018-10-18 09:50:10

@Goro,我认为,有一个最简单的完全正确的答案。然而,我发现打字是件很痛苦的事。我建议你

代码语言:javascript
复制
ls .??*

这是绝对正确的,这将错过像.a这样的文件,但这些文件是非常罕见的,在实践中,我认为它并不重要,特别是对于交互式使用。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/476245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档