我想在将它们提交给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
或类似。
答案 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)
)