如何在bash中使用 *通配符,但排除父目录(..)?
有时我想对目录中的所有文件(包括隐藏文件)执行命令。当我尝试使用
chmod g+w * .* 它改变了我想要的所有文件(在目录中)和父目录中的所有文件的权限(我想孤独)。 有通配符做正确的事情,还是我需要开始使用find?
你将需要两个glob模式来覆盖所有潜在的“点文件”:。[^。] *和..?*。
第一个匹配具有两个或更多字符的所有目录条目,其中第一个字符是点,第二个字符不是点。第二个选择具有三个或更多字符的以..开头的条目(这排除..因为它只有两个字符,以。开头,但包括(不太可能的)条目,如..foo)。 chmod g+w .[^.]* ..?* 这应该在大多数所有shell都很好,适合于脚本。 对于常规的交互使用,模式可能太难记住。对于这些情况,你的shell可能有一个更方便的方法跳过。和… # bash GLOBIGNORE=.:.. echo .* 您可以考虑在其中一个bash自定义文件(例如.bash_profile / .bash_login或.bashrc)中设置GLOBIGNORE。 此外,您可以将shell配置为在不以显式点(例如*)开头的模式中包含“点文件”。 # zsh setopt glob_dots # bash shopt -s dotglob # show all files,even “dot files” echo * (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |