
他のディレクトリにいくつかの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=-