使用"xargs rm"删除损坏的gz存档



我想在将.gz文件提交到Hadoop/Spark之前对其进行预处理。这是为了避免这些问题,例如这些问题。下面的 bash 管道几乎可以满足我的需要,除了xargs rm似乎没有删除未通过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 -n 1 gunzip -t 2>&1:一次发送一个列表(-n 1(给gunzip -t以测试输入
  • cut -f 2 -d: -:从gunzip的输出中提取文件名,这是用:字符分隔的行的第二个字段(-f 2
  • (
  • xargs -t -n 1 rm:一次将cut的输出发送到rm一个文件名,并在运行时打印出进度(-t
  • (

最新更新