回答:
使用する--absolute-names
か、-P
この機能を無効にするオプションを選択します。
tar fczP bkup.tar.gz /home/foo/
tar fcz bkup.tar.gz --absolute-names /home/foo
-C /
@Marcusの回答で説明されているオプションを使用すると、それが主な目標である場合、STDERRメッセージがgit ridされます。
これは実際には機能であり、問題ではありません。絶対的な場所を持つアーカイブはセキュリティ上のリスクです。攻撃者はこのようなアーカイブを使用して、ユーザーをだましてシステムの重要な場所にファイルをインストールさせる可能性があります。
はい、使用できます-P
。しかし、tarがスラッシュを削除できるようにして、アーカイブのユーザーにルートディレクトリで明示的に抽出を行うように要求することの何が問題になっていますか?その後、彼らは意識的に重要なシステムの場所に影響を与えており、偶然にそれを行うことはできません。
tar
。この特定のメッセージはtar
、ステータスが1
で終了する原因となっていたため、tar
このメッセージがSTDERRに書き込まれたために、バックアップの成功時に誤った電子メールアラートを受信していました。私はマーカスのソリューション@の自分自身の微調整バージョンを使用してこの問題を修正:cd /path/to/network/share && tar -cJf scripts.backup.tar.xz -C / home/user/scripts 2>/dev/null || [send an email alert]
-P
-たとえば、FUSEで何らかのファイルシステムスナップショット機能を提供している場合。cwd
ユーザーの視点からではなく、特定のディレクトリでスナップショットを展開したい場合があります。
あなたはSTDERRに印刷されている「メンバー名から`/」有数の削除」を取り除くためにしたいが、それでもタールが賢明デフォルトで行うように、これらの主要なスラッシュをオフのままにしたい場合は、私は優れたソリューションを見たここでコメント投稿のtimsoftによってを。
ソリューションでは、-Cオプションを使用してディレクトリをルート(/)に変更し、アーカイブするファイルツリーを先頭のスラッシュなしで指定します。相対パスのみが必要になったためです。これは通常のtar createコマンドと同じことを行いますが、ストリッピングは必要ありません。
tar fcz bkup.tar.gz -C / home/foo/
tar c -C / home/foo/*
シェルは変更されたルートを知らないため、シェル拡張(例えば)で示されるファイルをtarしたい場合にも動作しません。しかし、他の場合にはまだ良い答えです。
-C /
私には役に立たない、期間。それは私にとって標準エラーを防ぐものではありません。
1か月遅れましたが、(シェルスクリプトで)私の場合に最も適切な解決策は、親ディレクトリに移動してそこでコマンドを実行することでした。
cd /var/www/
tar -czf mysite.gz mysite
の代わりに:
tar -czf /var/www/mysite.gz /var/www/mysite
これは、ブルートフォースメソッドを使用して行った方法です2>&1 | grep -v "Removing leading"
。
例えば:
tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v "Removing leading"
tar
コマンドが返さ2
れる場合があります。