tarおよびkeep-old-filesオプションを使用したエラー処理

tarおよびkeep-old-filesオプションを使用したエラー処理

--keep-old-files私はすでに存在するファイルを削除しないようにtarファイルを解凍するときにこのオプションを使用しています。面倒なことに、ファイルがすでに存在する場合、tarはエラーコード#2(致命的なエラー)を生成します。

私のスクリプトは、ファイルの圧縮が正常に解放されたときにログを記録し、このログを使用してtarファイルの圧縮を再開しないようにするため、これがエラーと見なされるべきではないことが私にとって重要です。

エラーを完全に無視して記録せずにファイルを上書きしないと信じることができますが、2つの問題があります。多くのエラーメッセージが生成され、ファイルが多く、非効率的です。各ファイルに対して1回ずつtarを開きます。

--keep-old-files既存のファイルから生成されたエラーは無視し、他のエラーは無視しない方法はありますか?

答え1

これは明らかに意図的に設計されています。文書:

より注意深く既存のファイルが置き換えられないようにするには、--keep-old-files-k)オプションを使用します。これにより、tar が既存のファイルの置換または更新を拒否します。つまり、アーカイブメンバーと同じ名前のファイルは、アーカイブメンバーが抽出されるのを防ぎます。代わりにエラーを報告します。

gitリポジトリには次のものが含まれています。修理する--skip-old-filesこの問題が将来のGNUバージョンで解決されるように、パラメータが導入されましたtar

+A new option --skip-old-files is introduced, which acts exactly as
+--keep-old-files, except that it does not treat existing files as
+errors.  Instead it just silently skips them.  An additional level of
+verbosity can be obtained by using the option --warning=existing-file
+together with this option.

このパッチはまだされていません。正式リリースしかし、しかし。

関連情報