バックアップ シェル スクリプトの一部に次のコマンドがあります。
tar -cjf site1.bz2 /var/www/site1/
アーカイブの内容を一覧表示すると、次のようになります。
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
/var/www/site1
しかし、抽出を簡素化し、無駄な一定のディレクトリ構造を避けるために、アーカイブ内のディレクトリとファイル名からその部分を削除したいと思います。Web データが下に保存されていない場所にバックアップされた Web サイトを抽出した場合に備えて、決してわかりません/var/www
。
上記の例では、次のものが必要です。
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
そのため、抽出すると、ファイルは現在のディレクトリに抽出され、後で抽出されたファイルを移動する必要がなくなり、サブディレクトリ構造が保持されます。
Web 上の他の場所でのtar とバックアップについてはすでに多くの質問がありますがstackoverflow
、それらのほとんどは、サブディレクトリ構造全体を削除する (フラット化する) か、名前の最初の / を追加または削除するだけです (私は知りません.抽出時に正確に何が変わるかはわかりません)が、それ以上はありません。
あちこちにある解決策とマニュアルを読んだ後、次のことを試しました。
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
しかし、どれも私が望むようには機能しませんでした。何もしないものもあれば、サブディレクトリをもうアーカイブしないものもあります。
Cronによって起動されたバックアップシェルスクリプト内にあるため、どのユーザーが実行したか、パスと現在のディレクトリはよくわからないため、常に絶対パスを記述することがすべてに必要であり、現在のディレクトリを変更したくないスクリプト内の何かをさらに壊さないようにするため (Web サイトだけでなくデータベースもバックアップし、そのすべてを FTP などに送信するため)。
これを達成する方法は?
オプション -C がどのように機能するかを誤解しただけですか?