chmod所有文件(包括隐藏文件)在Linux目录(不recursion)

昨天我做了一些愚蠢的事情,我今天意识到了。 我跑了:

/root# chmod o-rwx * .* 

这应该删除当前目录( /root )中所有文件的读,写和执行权限。 只要我这样做, screenperformance奇怪,我不能作为非root用户运行命令,ssh拒绝工作,除非我用rootlogin。

这是由于bash扩大的事实造成的。 现在,我怎么chmod chmod目录中的所有文件,而不使用find ,循环或其他语言,如Perl?

如果你使用的是bash,那么设置dotglob会使*也匹配以a开头的文件.

 shopt -s dotglob echo * 

你说“不使用发现”,但发现真的是这个工作的正确工具,因为它提供了一个高层次的控制。 你可以告诉它是否recursion,是否改变目录等等。例如:

  • 当前目录中的所有文件: find . -maxdepth 1 -type f find . -maxdepth 1 -type f
  • 所有条目(文件+目录+其他): find . -maxdepth 1 find . -maxdepth 1

查找通常不区分常规文件和“隐藏”文件,但不包括.. 如果你想让它忽略它们,你可以添加'!' -name '.*' '!' -name '.*' ,如果你想让它只在点文件上运行,你可以添加-name '.*'

另外一件好事就是你可以做上面的事情,并打印出它将要操作的条目。 因此,添加“| less”到最后,您可以在实际进行更改之前观察它的操作。 这个审查步骤可能会阻止你看到的问题。

一旦你有一个你喜欢的find命令,你可以通过添加-exec chmod o-rwx '{}' ';'来运行chmod命令-exec chmod o-rwx '{}' ';' 到最后。 更改';'+如果你的find版本支持它。

真的,在这种情况下find工具是你不应该害怕的,它确实是工作的正确工具。

它简短而快乐,并不完全可靠,因为它忽略了奇怪名称的点名(例如.+baz ),但是由于这些名称很less,所以我教自己做

 chmod -R foo:bar * .[0-z]*