我看到了许多关于这个主题的问题,但我缺乏将其翻译成我的具体问题的能力。 我有一个for循环,可以循环遍历子目录,然后在每个目录中执行压缩的文本文件上的.sh脚本。 我想并行化这个过程,但我无法应用gnu parallel。
这是我的循环:
for d in ./*/ ; do (cd "$d" && script.sh); done
我理解需要将列表输入到并行处理中,因此我一直在尝试这样做:
ls -d */ | parallel cd && script.sh
虽然看起来开始了,但当gzip尝试解压目录中的一个txt文件时,出现了错误,说文件不存在:
gzip: *.txt.gz: No such file or directory
然而,当我运行原始的for循环时,除了需要很长时间才能完成之外,我没有遇到任何问题。此外,只有在使用Parallel时,我才会遇到gzip错误一次,这太奇怪了,考虑到我有1000多个子目录。
我的问题是:
如何让Parallel在我的情况下工作?如何使parallel化一个.sh脚本应用于它们自己的子目录中的数千个文件?即-什么是解决我的问题的解决方案?我必须取得进展。
我错过了什么?语法、循环、坏脚本?我想学习。
Parallel是否实际上尝试并行运行所有这些.sh脚本?为什么我不会为每个.txt.gz文件收到错误?
Parallel是应用的最佳选择吗?是否有另一个更适合我的需求的选项?