「動的」フルパスを削除するためにtarを使用できますか?

「動的」フルパスを削除するためにtarを使用できますか?

他のディレクトリにいくつかのmp3があります。私

find $HOME -name *.mp3|pax -wf arch.tar

コマンドは正常に機能しますが、抽出時にディレクトリ全体が再生成されます。

tar -tvf arch.tar

返品

dir1/dir2/sound.mp3
dir3/music.mp3
dir4/dir5/anotherdir/anothermusic.mp3

もちろん、抽出すると多くのディレクトリが作成されます。私の願いはこれです

find $HOME -name *.mp3|pax -w"possibleoption" -f arch.tar

これらのファイルを入手してください

/sound.mp3
/music.mp3
/anothermusic.mp3

これは安全ではないことを知っていますが、dirパスを動的に削除できますか?

ps = たとえばpaxコマンドを使用しましたが、クラシックtarもうまく機能します。

ベストアンサー1

これらのバリエーションはすべて、ユーザーがアーカイブを作成し、アーカイブ自体に元のパスを保存したと仮定します。アーカイブのリスト/抽出時にパスを変換します。

paxそのフラグと一緒に使用されます-s

pax -f archive.tar -s '@.*/@/@' '*.mp3'

-r実際にファイルを抽出するために最初に追加されました。

BSDの使用tar:

tar -tf archive.tar -s '@.*/@/@' '*.mp3'

実際にファイルを抽出する-tように変更します。-x

GNUの使用tar:

tar -tPf archive.tar --transform 's@.*/@/@' --show-transformed-names --wildcards '*.mp3'

実際にファイルを抽出する-tように変更します。-x

文字列の置き換えは、アーカイブに保存されたパスを削除し、単一の/


標準入力からパス名を読み取るファイルを使用してアーカイブを生成するのと同じ操作(パスをに変更して名前を変換する/):

pax:

pax -w -f archive.tar -s '@.*/@/@'

BSD tar:

tar -c -f archive.tar -s '@.*/@/@'

グヌtar

tar -c -f archive.tar --transform='s@.*/@/@' --files-from=-

おすすめ記事