昨天我做了一件蠢事,今天我才意识到。我运行了:
/root# chmod o-rwx * .*
这样做的目的是删除当前目录 ( /root
) 中所有文件的读取、写入和执行权限。我这样做之后,screen
出现了奇怪的行为,我无法以非 root 用户身份运行命令,除非我以 root 用户身份登录,否则 ssh 拒绝工作。
这是因为也bash
扩展.*
到了!现在,如何使用 (而不是使用 )、循环或其他语言(如 perl)..
来 chmod 目录中的所有文件?chmod
find
答案1
如果您使用 bash,则设置dotglob
还会*
匹配以 . 开头的文件.
。
shopt -s dotglob
echo *
答案2
您说“不使用 find”,但 find 确实是完成这项工作的合适工具,因为它提供了高级别的控制。您可以告诉它是否递归、是否更改目录等...例如:
- 当前目录中的所有文件:
find . -maxdepth 1 -type f
- 所有条目(文件+目录+其他):
find . -maxdepth 1
Find 通常不区分常规文件和“隐藏”文件,但它不包括..
。如果您希望它忽略它们,您可以添加'!' -name '.*'
,如果您希望它仅对点文件进行操作,您可以添加-name '.*'
。
它的另一个好处是您可以执行上述操作,它会打印出它将操作的条目。因此,在末尾添加“| less”,您可以在实际进行更改之前目测它将操作什么。此检查步骤可能已避免您看到的问题。
找到喜欢的 find 命令后,可以通过在命令-exec chmod o-rwx '{}' ';'
末尾添加 chmod 命令来让它运行。如果您的版本支持,请更改';'
为。+
find
确实,在这种情况下你不应该害怕使用 find 工具,它确实是适合这项工作的工具。
答案3
它很短小精悍,但并不完全可靠,因为它会漏掉名字奇怪的点文件(例如.+baz
),但由于非常其中有些是我自学的
chmod -R foo:bar * .[0-z]*