使用“xargs rm”删除损坏的gz档案

时间:2017-05-14 21:02:28

标签: bash xargs gunzip

我想在将它们提交给Hadoop / Spark之前预先处理.gz文件的目录。这是为了避免出现问题,例如these ones。以下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

或类似。

1 个答案:

答案 0 :(得分:0)

由于某种原因,它看起来好像只删除了一个文件,然后完成。两次调用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 test 输入
  • cut -f 2 -d: -:从gunzip的输出中提取文件名,-f 2是由:字符
  • 分隔的行的第二个字段(xargs -t -n 1 rm
  • cut:一次将rm的输出发送到-t一个文件名,在操作时打印出进度(if(cursor .getCount() > 0)