如何在这个bash一行程序中实现并行性
有人能帮我整理一下这脏兮兮的一行程序并实现并行性吗如何在这个bash一行程序中实现并行性,bash,Bash,有人能帮我整理一下这脏兮兮的一行程序并实现并行性吗 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 ".
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
如果并行任务共享相同的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
一个您知道要删除的文件是微不足道的。当所有操作都依赖于前面的所有步骤时,引入并行性是相当困难的,因为您的命令由&
链接,因此,在前面的所有步骤都成功之前,您不能执行任何后续步骤。它们当前是相互依赖的,但我看不出有任何理由存在这种依赖性。如果确实不需要依赖项,只需并行启动所有查找,然后并行启动chown/chmod(如果同时执行,chmod/chown将抱怨缺少文件,并且某些文件将无法处理)。只需尝试了解。。。当chown
和chmod
的参数不需要引号时,为什么{}
的
参数需要单引号?它实际上并不需要引号;当我复制/粘贴你cnde的那些部分时,我保留了它们,但是一对大括号实际上不需要引用。(在Bash中,可能会使用其他大括号。)