chmod Linux 中目录中的所有文件(包括隐藏文件)(非递归)

chmod Linux 中目录中的所有文件(包括隐藏文件)(非递归)

昨天我做了一件蠢事,今天我才意识到。我运行了:

/root# chmod o-rwx * .*

这样做的目的是删除当前目录 ( /root) 中所有文件的读取、写入和执行权限。我这样做之后,screen出现了奇怪的行为,我无法以非 root 用户身份运行命令,除非我以 root 用户身份登录,否则 ssh 拒绝工作。

这是因为也bash扩展.*到了!现在,如何使用 (而不是使用 )、循环或其他语言(如 perl)..来 chmod 目录中的所有文件?chmodfind

答案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]*

相关内容