我正在在线运行较大的复印作业。 我正在使用 tar 将其通过管道传输到 xargs。
我的命令如下所示:
tar cvf - --sort=name --ignore-failed-read -C /pathto/source . | pv | xargs -n 1 -P 32 $(tar xvf - --keep-newer-files -C /pathto/destination)
该命令有效并执行其应该执行的操作。 但是有时它会停止并显示以下错误消息:
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
sh: 1: xargs: Argument list too long
我怀疑当发生更改(例如删除源文件夹中的文件)时,可能会发生这种情况。文件虽小但很多。 所以当这种情况发生时我只能从头开始,遍历所有已经复制的文件,至少需要半天时间。
所以我想知道是否有办法告诉这个命令它应该继续而不是中断。 它应该继续处理下一个文件。 此次运行中的文件丢失或损坏等错误将在稍后解决。
我已将
--ignore-failed-read
添加到命令中,但没有帮助。
也许我添加错了,或者它没有按照我想象的那样做。
只需使用管道即可。相同的差异,没有潜在的论证错误。
#!/bin/bash
mkfifo my_fifo
tar cvf - --sort=name --ignore-failed-read -C /pathto/source . | pv > my_fifo &
tar xvf my_fifo --keep-newer-files -C /pathto/destination --remove-files
这实现了与原始命令相同的并行提取。