加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在bash中使用 *通配符,但排除父目录(..)?

发布时间:2020-12-15 09:10:52 所属栏目:安全 来源:网络整理
导读:有时我想对目录中的所有文件(包括隐藏文件)执行命令。当我尝试使用 chmod g+w * .* 它改变了我想要的所有文件(在目录中)和父目录中的所有文件的权限(我想孤独)。 有通配符做正确的事情,还是我需要开始使用find? 你将需要两个glob模式来覆盖所有潜在的“点
有时我想对目录中的所有文件(包括隐藏文件)执行命令。当我尝试使用
chmod g+w * .*

它改变了我想要的所有文件(在目录中)和父目录中的所有文件的权限(我想孤独)。

有通配符做正确的事情,还是我需要开始使用find?

你将需要两个glob模式来覆盖所有潜在的“点文件”:。[^。] *和..?*。

第一个匹配具有两个或更多字符的所有目录条目,其中第一个字符是点,第二个字符不是点。第二个选择具有三个或更多字符的以..开头的条目(这排除..因为它只有两个字符,以。开头,但包括(不太可能的)条目,如..foo)。

chmod g+w .[^.]* ..?*

这应该在大多数所有shell都很好,适合于脚本。

对于常规的交互使用,模式可能太难记住。对于这些情况,你的shell可能有一个更方便的方法跳过。和…
zsh总是排除。和..从像。*。
使用bash,您必须使用GLOBIGNORE shell变量。

# bash
GLOBIGNORE=.:..
echo .*

您可以考虑在其中一个bash自定义文件(例如.bash_profile / .bash_login或.bashrc)中设置GLOBIGNORE。
但是,如果您经常使用其他环境,请小心,习惯于这种定制。
如果在缺少定制的环境中运行类似chmod g w。*的命令,那么您将意外地结束包括。和..在你的命令。

此外,您可以将shell配置为在不以显式点(例如*)开头的模式中包含“点文件”。

# zsh
setopt glob_dots

# bash
shopt -s dotglob


# show all files,even “dot files”
echo *

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读