私はPHPスクリプトを実行しています。このスクリプトはtarにしたいファイルの絶対パスを取得します。これは私が持っている構文です:
tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls
解凍すると、ファイルへの絶対パスが作成されます。どうすれば/path
その下にすべてを表示するには?
ファイル名の最初のn個の先頭のコンポーネントを削除する場合は、strip-components
が必要です。あなたの場合、抽出時に
tar xvf tarname.tar --strip-components=2
manページ には、これを含むtar
の多くのオプションのリストがあります。いくつかの以前のバージョンのtar
は、代わりにこの操作に--strip-path
を使用します。
ディレクトリの変更に使用される-C
スイッチを誤って使用しています。だからあなたがする必要があるのは:
tar -cf tarname.tar -C /www/path path/file1.txt path2/path3/file2.xls
または/www/path
doですべてをパッケージ化する場合:
tar -cf tarname.tar -C /www/path .
-C
スイッチを複数回使用できます。
私にとって、次の方法が最適です。
tar xvf some.tar --transform 's?.*/??g'
--transform
引数は、sedの置換正規表現であり、抽出されたすべてのファイルパスがフィードされます。 --strip-components
とは異なり、コンポーネントの固定数だけでなく、すべてのパス情報を削除します。
パスに含まれるコンポーネントの数がわからない場合は、これを試すことができます。
DIR_TO_PACK=/www/path/
cd $DIR_TO_PACK/..
tar -cf tarname.tar $(basename $DIR_TO_PACK)