web-dev-qa-db-ja.com

tarの絶対パスを除外するにはどうすればよいですか?

私はPHPスクリプトを実行しています。このスクリプトはtarにしたいファイルの絶対パスを取得します。これは私が持っている構文です:

tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls

解凍すると、ファイルへの絶対パスが作成されます。どうすれば/pathその下にすべてを表示するには?

35
Angel S. Moreno

ファイル名の最初のn個の先頭のコンポーネントを削除する場合は、strip-componentsが必要です。あなたの場合、抽出時に

tar xvf tarname.tar --strip-components=2

manページ には、これを含むtarの多くのオプションのリストがあります。いくつかの以前のバージョンのtarは、代わりにこの操作に--strip-pathを使用します。

50
ire_and_curses

ディレクトリの変更に使用される-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スイッチを複数回使用できます。

51
Johnny Baloney

私にとって、次の方法が最適です。

tar xvf some.tar --transform 's?.*/??g'

--transform引数は、sedの置換正規表現であり、抽出されたすべてのファイルパスがフィードされます。 --strip-componentsとは異なり、コンポーネントの固定数だけでなく、すべてのパス情報を削除します。

10
Roman Saveljev

パスに含まれるコンポーネントの数がわからない場合は、これを試すことができます。

DIR_TO_PACK=/www/path/
cd $DIR_TO_PACK/..
tar -cf tarname.tar $(basename $DIR_TO_PACK)
0