有人可以帮我整理一下这个肮脏的单行代码并实现并行性吗?
find . -name "*.php" -exec rename 's/\.php$/.txt/' '{}' \; && chown www-data:www-data -R * && chmod 0755 -R * && find . -name "*.html" -exec rename 's/\.html$/.txt/' '{}' \; && find . -name ".htaccess" -delete
答案 0 :(得分:6)
如果并行任务共享相同的I / O通道,则将并行性添加到I / O绑定的任务集只会使其变慢。 (提示:他们在这里。)
这里唯一有用的优化是减少遍历同一目录树的次数。
find . -exec chown www-data:www-data {} \; \
-exec chmod 0755 {} \; \
\( -name "*.php" -exec rename 's/\.php$/.txt/' '{}' \; \
-o -name "*.html" -exec rename 's/\.html$/.txt/' '{}' \; \
-o -name ".htaccess" -delete \)
这仍然可以调整,例如与将五个目录遍历减少为一个相比,避免将自己知道要删除的文件chown
只是小土豆。
答案 1 :(得分:0)
在给您答案之前,请注意以下几点:
&&
不是某种魔术组合运算符-它是逻辑AND运算符。在单行代码中,如果任何命令返回非零退出状态,则其余命令将不执行。
现在,给出答案。我添加了换行符以提高可读性,但可以安全地将其替换为空格
find . -name "*.php" -exec rename 's/.php$/.txt/' '{}' \; & \
chown www-data:www-data -R * & \
chmod 0755 -R * & \
find . -name "*.html" -exec rename 's/.html$/.txt/' '{}' \; & \
find . -name ".htaccess" -delete & \