如何在这种bash单行代码中实现并行性

0 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 ".htaccess" -delete
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 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 \)
Run Code Online (Sandbox Code Playgroud)

仍然可以进行调整,但是例如,chown与将五个目录遍历减少为一个相比,避免将文件删除是一个小麻烦。