rm -rf .*不会因为rm拒绝删除.和..而可怕地结束。
如何从glob模式中排除这些特殊目录?
这不是由dotglob解决的,因为我只想匹配以点开头的文件,而不是所有文件。
发布于 2018-10-18 10:00:09
使用bash时,设置GLOBIGNORE特殊变量是一些非空值,这足以使它在展开globs时忽略.和..。来自巴什博士:
GLOBIGNOREshell变量可用于限制匹配模式的文件名集。如果设置了GLOBIGNORE,则匹配GLOBIGNORE中的模式之一的匹配文件名将从匹配列表中删除。如果设置了nocaseglob选项,则将执行与GLOBIGNORE中的模式的匹配,而不考虑情况。当设置.和null时,文件名..和GLOBIGNORE总是被忽略。但是,将GLOBIGNORE设置为非空值具有启用dotglob选项的效果,因此以‘.‘开头的所有其他文件名都将匹配。
如果我们将其设置为.:..,则.和..都将被忽略。因为将其设置为任何非空值也会得到这种行为,所以我们最好将其设置为.。
所以:
GLOBIGNORE=.
rm -rf .*(来自我早些时候在问Ubuntu的问题上的回答.)
发布于 2018-10-18 09:29:10
这应该可以做到:
rm -rf .[^.] .??* 此命令可以捕获所有情况。
.[^.]将捕获任意两个字符条目。.??*将只匹配3+字符文件名。
发布于 2018-10-18 09:50:10
@Goro,我认为,有一个最简单的完全正确的答案。然而,我发现打字是件很痛苦的事。我建议你
ls .??*这是绝对正确的,这将错过像.a这样的文件,但这些文件是非常罕见的,在实践中,我认为它并不重要,特别是对于交互式使用。
https://unix.stackexchange.com/questions/476245
复制相似问题