是否可以使用 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 '@.*/@/@'

GNU tar

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

相关内容