使递归 chmod 更快

使递归 chmod 更快

我有一个安装脚本,它unzip获取目录,然后递归chmod获取其内容。

令我惊讶的是,运行以下两个命令所花的时间几乎是解压缩所花时间的 10 倍:

find $dir -type f -exec chmod a+r "{}" \;
find $dir -type d -exec chmod a+rx "{}" \;

我做错了什么吗?有没有更快的方法来改变所有文件和目录的 chmod?

答案1

find您可以使用 chmod 的标志来摆脱命令X

execute/search only if the file is a directory or already has execute permission for some user (X)

这样,您只需一个命令即可对文件和目录设置相同的权限,并且目录还可以执行:

$ chmod -R a+rX $dir

答案2

您可以执行以下操作(假设是 Linux):

cd $dir
chmod -R a+r .
find . -type d -print0 | xargs -0 chmod a+x

这应该比您在问题中指出的两个命令的组合要快得多。

答案3

改用tar。特别是使用-p, --preserve-permissions, --same-permissions标志。
您不能直接压缩它,但是-z, --gzip-j, --bzip2-J, --xz应该可以很好地工作。如果您真的必须使用 zip,那只是一个|方法。

答案4

根据你的命令,我认为你正在花时间等待 find 而不是 chmod。

尝试:

chmod -R a+r $dir

“-R”表示递归

当你运行 unzip 和其他命令时,请在它们前面加上

time

测量执行各种命令所花费的时间。

相关内容