我正在使用-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 文件。
在我的 Debian 提取中没有
-P
yieldsRemoving leading '/' from member names
。-P
也许您所需要的只是在解压缩到另一个目录时不要使用。如果上述方法有任何问题,请考虑
--transform
. 来自man 1 tar
:所以这
将从每个路径中删除一个前导斜杠(如果存在)。但因为
////foo
等同于/foo
,以下似乎更好:它将删除所有前导斜杠。