我正在尝试将此命令转换为不使用并行的命令。
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