我有一个文件夹,每隔5分钟就有一个文件。假设每个文件的文件名都是'Test-HHMM.png',我想检查每个文件的存在。到目前为止,这是我的。GNU并行 - 这些嵌套的并行可以是单个并行调用吗?
parallel "[ -f {1} ] || echo '{1} - Nope'" ::: $(parallel printf %s-%02d%02d.png\\\\n {1} {2} {3} ::: 'Test' ::: $(seq 0 23) ::: $(seq 0 5 55))
所以这是给parallel
第一个呼叫,它使用printf
创造了一系列的文件名,使用2个电话seq
生成小时和分钟。然后第二次拨打parallel
对每个文件名进行-f
测试。
这似乎可能只是一个电话parallel
,其中命令是-f
测试所有参数的$(printf)
的结果。但我似乎无法得到正确的语法。我似乎也无法将命令分解为子命令,然后进行连接,以便于阅读。
有什么想法?使用parallel
错误似乎很危险;感觉像使用循环会更好。
更新 这里是我的问题的简化版本 - 看起来很普通,但我可以从此建立到我需要的东西。目前,我有这样的:
parallel echo $(printf %02d {1}) ::: $(seq 1 10)
我预计这将打印 01 02 ... 10
相反,我得到 ./foo.sh: line 7: printf: {1}: invalid number 00 1 00 2 ... 00 10
不知道为什么。试过的“许多组合和”无efefect
感谢
因为OP可能不熟悉'perl',所以我会将代码放在多行'.pl'中,并添加[extra]注释以帮助OP理解脚本正在做什么。他会更有可能以这种方式使用它(如果他了解并因此相信它足以超越bash“舒适区”)。如果这是更好的工具[尤其是IMO,作为一名经验丰富的'perl'程序员,它通常是],那么情况尤其如此。 –
其实这个要求就像我描述的那样:)一个简单的bash脚本,用于列出时间序列中的哪些文件由于某种原因而丢失。没有perl等不是功课;更像是控制其他开发人员编写1000多行代码而不是使用'imagemagick'等。(Spoiler:他们按小时付费) –
@CraigEstey我必须同意。我对Perl很熟悉,但写的脚本对我没有任何好处。对不起,没有人赞赏。 –