![是否可以使用 tar 删除“动态”完整路径?](https://linux22.com/image/131176/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20tar%20%E5%88%A0%E9%99%A4%E2%80%9C%E5%8A%A8%E6%80%81%E2%80%9D%E5%AE%8C%E6%95%B4%E8%B7%AF%E5%BE%84%EF%BC%9F.png)
我在不同的目录中有一些 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=-