Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在这个bash一行程序中实现并行性_Bash - Fatal编程技术网

如何在这个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中,可能会使用其他大括号。)