web-dev-qa-db-ja.com

TARでアーカイブしながらパスを取り除く方法

Tarでアーカイブしたいファイルのリストを含むファイルがあります。 mylist.txtとしましょう

を含む:

/path1/path2/file1.txt
/path1/path2/file3.txt
...
/path1/path2/file10.txt

私がしたいことは、このファイルをtarballにアーカイブすることですが、/path1/path2/は除外します。現在これを行うことによって:

tar -cvf allfiles.tar -T mylist.txt

アーカイブ解除後にパスを保持します。

私はこれを試しましたが、うまくいきません:

tar -cvf -C /path1/path2 allfiles.tar -T mylist.txt

Mylist.txtにないファイルも含めて、/path1/path2のすべてのファイルをアーカイブします

それを行う方法はありますか?

23
neversaint

「抽出フェーズ」では、strip-componentsフラグ

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

これにより、ファイル名の最初のn個の先行コンポーネントが削除されます。ただし、異なるfile-path-componentsがある場合、これはすべての場合に機能するわけではありません。

アーカイブ中にそれをしたい場合は、1つだけ頭に浮かびます。

入力:ファイルのリスト+フルパス

1)各行について、ファイル名からパスを分割します

2)そのパスに対してcdを実行し、そのファイル名に対してtarを実行します

3)行ごとに繰り返す

35
hovanessyan