仅通过脚本或鹦鹉螺菜单递归 chmod 文件夹或仅文件?

DM8*_*DM8 8 bash chmod nautilus

这已经在这里讨论过。

我想知道的是如何打开这些:

递归 chmod 仅此文件夹中的文件:

find . -type f -exec chmod 0600 {} \;
Run Code Online (Sandbox Code Playgroud)

仅递归 chmod 文件夹中的文件夹:

find . -type d -exec chmod 0755 {} \;
Run Code Online (Sandbox Code Playgroud)

进入一个 bash 脚本,所以它可能是这样的:

对于文件:

rchmodf 744 .
Run Code Online (Sandbox Code Playgroud)

对于目录:

rchmodd 755 .
Run Code Online (Sandbox Code Playgroud)

并且...如果可能的话,也可能进入 nautilus 右键单击​​菜单选项。

Gil*_*il' 10

这是您可以通过将模式作为第一个参数传递并将一个或多个目录名称作为后续参数传递来调用的脚本。在 Linux 下,如果你不传递任何目录名,就好像你传递了.(当前目录)。命名此脚本rchmodf,使其可执行 ( chmod a+rx /path/to/rchmodf) 并将其放在$PATH.

#!/bin/sh
mode=$1; shift
find "$@" -type f -exec chmod "$mode" {} +
Run Code Online (Sandbox Code Playgroud)

说明:mode=$1; shift将变量设置为mode脚本的第一个参数并从列表中删除第一个参数。"$@"扩展到所有参数的列表。

如果您愿意,您可以制作一个接受目录模式和文件模式的脚本。

#!/bin/sh
dir_mode=$1; shift
file_mode=$1; shift
find "$@" -type d -exec chmod "$dir_mode" {} + -o -type f -exec chmod "$file_mode" {} +
Run Code Online (Sandbox Code Playgroud)

请注意,744 不是一种有用的文件模式;644(用户可写和全球可读)和 755(也是全球可执行)更常见。此外,将树中的每个文件更改为可执行或不可执行也很少有用。您可能希望使用诸如+rX(capital X,只为目录和已经可执行的文件设置可执行位) 之类的参数调用此脚本。事实上,X符号模式可能就是您使用这些脚本所追求的:chmod -R +rX ..

使用 bash 或 zsh,还有另一种递归操作的方法,但仅限于目录。对于 bash,您需要版本 4 并首先运行shopt -s globstar

chmod a+rx **/*/
Run Code Online (Sandbox Code Playgroud)

在 zsh 中,您只能通过后缀(.):对文件进行操作chmod a+r **/*(.)

我将传递 Nautilus 问题。