【发布时间】:2020-04-29 13:27:04
【问题描述】:
下一个问题发生在我身上:
有一个 TAR 存档,我必须使用 file-roller 编译一段时间作为脚本例程,使用 file-roller 命令。
现在我不得不将我的脚本更改为更“技术性”和跨平台直接引用 TAR 命令:
为此,我只需 cd 到特定目录并使用此命令:
tar -cvzf "path/to/archive.tar.gz" "." > /dev/null 2>&1
“.”的问题目录被转换为档案内的路径,文件存储在子目录“。”下。下一种方式:
archive.tar.gz
-> ./
-> file1.ext
-> file2.ext
我已经设法使用--transform 选项以这种方式将文件恢复到存档的根文件夹中:
tar -cvzf "path/to/archive.tar.gz" --transform "s,.,," "." > /dev/null 2>&1
结果是正确组织的存档,文件移动到存档根文件夹:
archive.tar.gz
-> file1.ext
-> file2.ext
file-roller 可以读取即将发布的存档,而 tar 的文件提取功能已损坏:
tar -x -f "path/to/archive.tar" -C "$TEMP_DIR/" file1.ext
TAR 必须立即报告:存档或类似文件中没有此类文件或目录。
tar -x -f "path/to/archive.tar" -C "$TEMP_DIR/"
仍然可以正常工作,并将所有文件从存档中提取到“$TEMP_DIR/”中。
【问题讨论】:
-
我从未与
--transform合作过,因此我仅将其作为评论而非答案。据我所知,您的--transform "s,.,,"删除了文件名中的所有句点,或者至少删除了每个名称中遇到的第一个句点。但是您想提取一个名为tarred-file.ext的文件,该文件确实有句点,因此找不到该文件。使用选项--show-transformed-names显示transform的效果。 -
您可以使用
tar -tvf yourfile.tar来查看tar 文件的内容(-t选项)。
标签: bash extract tar archive gunzip