我正在使用该-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
收益Removing leading '/' from member names
。也许您所需要的只是-P
在提取到另一个目录时不使用。
如果上述方法有任何问题,请考虑--transform
。来自man 1 tar
:
--transform=EXPRESSION
,--xform=EXPRESSION
使用sed
replaceEXPRESSION
转换文件名。
所以这
tar -x --transform='s|^/||' …
将从每个路径中删除一个前导斜线(如果有的话)。但是因为////foo
等效于/foo
,所以以下内容似乎更好:
tar -x --transform='s|^/*||' …
它将删除所有前导斜杠。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句