我有一个安装脚本,它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
测量执行各种命令所花费的时间。