有时我想对目录中的所有文件(包括隐藏文件)执行命令。当我尝试使用
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 *