2017-05-14 6 views
0

を「xargsのは、RM」と私はHadoopの/スパークに送信する前に.gzというファイルのディレクトリを事前処理したい壊れGZアーカイブを削除します。これは、theseonesなどの問題を回避することです。次のbashのパイプラインはほとんど私はxargs rmgunzip -tテストに失敗したファイルを削除していないよう除いて、必要なものを行います。

gunzip -t *.gz 2>&1 | cut -f 2 -d: - | xargs rm 

パイプラインはサイレントモードで動作します。 gunzip -t *.gzが再び呼び出されたときしかし、それは

gzip: unhappy.gz: unexpected end of file 

または類似を出力します。

+1

あなたの正確なコマンドが正常に動作します。何がうまくいかないのかについての詳細を提供する必要があります。エラーメッセージが表示されますか? 'xargs rm'に与えられる入力は何ですか?まったく同じ入力で 'xargs rm'を手動で呼び出すとどうなりますか? – hvd

+0

複数の入力ファイルが壊れている場合に問題が発生するようです。データは貴重である場合には、 –

+0

関連はありませんが、あなたはgzrecover試してみましたか? –

答えて

0

何らかの理由でこれが唯一の終了、その後、一つのファイルを削除しているかのように、それが見えます。

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:そのリストを送って二回xargsを呼び出します(より複雑な)パイプラインは、はるかに確実に動作するようです1回に1つ(-n 1)〜gunzip -t試験入力
  • cut -f 2 -d: -は::文字で区切られた行の2番目のフィールド(-f 2)であるgunzipの出力からファイル名を抽出
  • xargs -t -n 1 rm:進捗を印刷、一度にrm 1ファイル名に(-t)をcutの出力を送信しますそれが動作するように私は単に `エコー> test.gz`で作成した偽の` test.gz`でそれをテストするとき