Bash 用“删除损坏的gz档案”;xargs rm";
在将.gz文件提交到Hadoop/Spark之前,我想对其目录进行预处理。这是为了避免问题,例如。下面的bash管道几乎满足了我的需要,只是Bash 用“删除损坏的gz档案”;xargs rm";,bash,xargs,gunzip,Bash,Xargs,Gunzip,在将.gz文件提交到Hadoop/Spark之前,我想对其目录进行预处理。这是为了避免问题,例如。下面的bash管道几乎满足了我的需要,只是xargsrm似乎没有删除通过gunzip-t测试的文件 gunzip -t *.gz 2>&1 | cut -f 2 -d: - | xargs rm 管道无声地工作。然而,当再次调用gunzip-t*.gz时,它会打印出来 gzip: unhappy.gz: unexpected end of file 或者类似的。出于某种原因,这看起
xargsrm
似乎没有删除通过gunzip-t
测试的文件
gunzip -t *.gz 2>&1 | cut -f 2 -d: - | xargs rm
管道无声地工作。然而,当再次调用gunzip-t*.gz
时,它会打印出来
gzip: unhappy.gz: unexpected end of file
或者类似的。出于某种原因,这看起来好像只删除了一个文件,然后就完成了。两次调用
xargs
的(更复杂的)管道似乎工作得更可靠:
ls *.gz | xargs -n 1 gunzip -t 2>&1 | cut -f 2 -d: - | xargs -t -n 1 rm
分解后,该管道表示:
:列出所有ls*.gz
文件.gz
:将该列表一次发送一个(xargs-n1 gunzip-t2>&1
)到-n1
,以测试输入gunzip-t
:从cut-f2-d:-
的输出中提取文件名,这是由gunzip
字符分隔的行的第二个字段(:
)-f2
:将xargs-t-n1rm
的输出一次发送到cut
一个文件名,在运行时打印出进度(rm
)-t
test.gz
测试它时,您的确切命令运行得很好,这个伪命令是用简单的echo>test.gz
创建的。你需要提供更多关于问题的细节。是否显示任何错误消息?向xargs rm
提供的输入是什么?如果您使用完全相同的输入手动调用xargs rm
,会发生什么情况?当存在多个损坏的输入文件时,似乎会出现问题。但是,如果数据有价值,您是否尝试过gzrecover?@RicardoBranco否,但这很有意义。在我的例子中,错误是由中断的下载引起的。使用gzrecover
可以节省不必要的下载。