将并行转换为 xargs 命令

将并行转换为 xargs 命令

我正在尝试将此命令转换为不使用并行的命令。

find . -type f -iregex '.*.ts\|.*.js\|.*.tsx\|.*.jsx' | parallel 'touch {} -d "$(date -d \@$((0x$(md5sum {} | cut -b 1-7))))"'

我想出的办法不起作用

find . -type f -iregex '.*.ts\|.*.js\|.*.tsx\|.*.jsx' -print0 | xargs -0 md5sum | cut -b 1-7 | xargs -0 -I {} touch -d \@0x{}

我想要完成的是将文件 mtime 设置为其 md5sum 以用于缓存目的

答案1

您没有写出要转换脚本的原因。也许您希望脚本不依赖于 GNU Parallel。

如果是这种情况,您可能会对parallel --embed将 GNU Parallel 嵌入到 shell 脚本中感兴趣:

parallel --embed > newscript

然后编辑 的结尾newscript

然后,您可以newscript在未安装 GNU Parallel 的计算机上使用。

--embed自版本 20180322 起可用。

答案2

xargs与 GNU 的区别并没有那么大,parallel 以至于您需要从根本上改变命令的结构。这

寻找 。<查找参数>-打印0 | xargs -0 -L 1 sh -c 'touch "$1" -d "$(date -d @$(( 0x$(md5sum "$1" | cut -b 1-7) )) )"' sh
作品。

此外,在我的系统上,您不需要使用date -d; touch也可以处理,所以你可以做 -d @number

寻找 。<查找参数>-打印0 | xargs -0 -L 1 sh -c 'touch "$1" -d "@$(( 0x$(md5sum "$1" | cut -b 1-7) ))"' sh

相关内容