Webサイトやシステムの運用作業の中で、よく tar
コマンドを使います。 これは非常に便利なコマンドで、ディレクトリを丸ごと固めてくれ、なんなら圧縮もしてくれます。 zip
でいいじゃないか zip で、という向きもあろうかと思いますが、Unix 系の OS では伝統的に tar が使われており、圧縮形式も gzip が良く使われています。
よくあるエラー
tar cvzf public_html.20190918.tar.gz public_html
などのコマンドを実行すると、たまに標題のエラーが発生することがあります。
※コマンドの説明省略
tar: Exiting with failure status due to previous errors
直訳すると、「さっき発生したエラーで処理を中断しました」といった感じです。
さっきと言われましても・・・さっきまで絶好調で tar コマンドが実行されていました。 こんな感じでログを表示しながら 。
public_html/img/D1550FD.jpg
public_html/img/L1-20DT.jpg
public_html/img/delivery.html
public_html/img/B7001DT.jpg
public_html/img/YM1601D.jpg
public_html/img/YM1502D.jpg
public_html/img/L1501.jpg
public_html/img/L1500DT.jpg
public_html/img/B7000DT.jpg
public_html/img/YM2210D.jpg
public_html/img/B1500.jpg
public_html/img/SD2040D.jpg
tar: Exiting with failure status due to previous errors
「さっき発生したエラー」はどこにも見当たりません。Google でエラーメッセージを検索するなどすると、読み取り権限の無いファイルがある場合にこのエラーが発生することがありますよ、という情報をちらほらと見かけます。
その、読み取り権限の無いファイルを探すために、
find . perm 000
とかやれば、権限の無いファイルを見つけられるよ、とも書かれています。
そうですね、そうかもしれません。
しかしたまたま、この間触っていたサーバーは実行でいるコマンドが制限されており、find は実行できませんでした。
どうしたものか・・・原因のファイルはどこにあるのか・・・
対応策
と思っていたら、このような情報を見つけました。
The tar
http://ask.xmodulo.com/tar-exiting-with-failure-status-due-to-previous-errors.html
command should actually print out what those “previous errors” are, but you can easily miss printed error messages if you run tar
in verbose mode (e.g., -cvf).
「オプションにv
をつけてログを出力させていると、エラー出力されているけど流れていって見逃してしまうよ」
そして解決策は
tar cvfz backup.tgz my_program > /dev/null
という風に標準出力を /dev/null に捨てればエラーだけ出力させられるということです。
原因が読み取り権限にあるのかどうか分からないまま find で探すより、正しいエラー原因が分かった方がいいですしね。