将文件从使用-P标志创建的tar文件中提取到相对路径

深空

我正在使用该-P标志创建tar文件,这意味着所有路径都是绝对路径(/不会从文件名中删除前导)。我使用它是因为我要覆盖多个目录,并且我需要将每个文件提取到正确的位置。

我正在使用脚本提取tar文件,并且如果提供了可选参数,则需要能够将文件提取到另一个目录。

我这样创建tar文件:

tar pcjfPv "${ARCHIVE_NAME}".tmp.bz  ${DIR_A} ${DIR_B}

${DIR_A}/path/a并且${DIR_B}/path/b

如果我不带参数执行提取脚本,我希望文件进入正确的目录。这部分与预期的一样tar mxfvjpP

但是,当脚本在参数中引用路径时,我想将文件提取到/path/from/argument/path/a和中/path/from/argument/path/b

这有可能吗?这是我目前拥有的:

if [ ! -d "${EXTRACT_TO}" ]; then
    echo "${EXTRACT_TO} does not exist, creating."
    mkdir -p ${EXTRACT_TO}
fi
tar mxfvjP - -C ${EXTRACT_TO}

那行不通。${EXTRACT_TO}已创建中的路径,但文件仍提取到/path/a和中/path/b

注意:我无法修改tar文件。

卡米尔·马乔洛夫斯基(Kamil Maciorowski)

在我的Debian中,提取没有 -P收益Removing leading '/' from member names也许您所需要的只是-P在提取到另一个目录时不使用


如果上述方法有任何问题,请考虑--transform来自man 1 tar

--transform=EXPRESSION--xform=EXPRESSION
使用sedreplaceEXPRESSION转换文件名。

所以这

tar -x --transform='s|^/||' …

将从每个路径中删除一个前导斜线(如果有的话)。但是因为////foo等效于/foo,所以以下内容似乎更好:

tar -x --transform='s|^/*||' …

它将删除所有前导斜杠。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章