有没有办法通过命令行在 Linux 中压缩文件以包含绝对路径?
我有一个 Python 程序,可以检查 zip 和 tar 中的绝对路径,并且想创建一个 zip 文件来检查该函数是否有效。
我能够使用 tar 成功完成此操作。我也在 Google 上搜索了这个问题的答案,并查看了 zip 文档和手册,但还没有找到明确的答案。
答案1
$> zip file.zip $PWD/test.txt
adding: path/to/test.txt (deflated 5%)
$> unzip -l file.zip
Archive: file.zip
Length Date Time Name
--------- ---------- ----- ----
20 03-11-2019 21:32 path/to/test.txt
--------- -------
20 1 file
还有一个开关:
$> zip -jj file.zip test.txt
adding: test.txt (deflated 5%)
$> unzip -l file.zip
Archive: file.zip
Length Date Time Name
--------- ---------- ----- ----
20 03-11-2019 21:32 path/to/test.txt
--------- -------
20 1 files
它会给你完全相同的结果,但如果你从一开始就这样做,/
那么你实际上做不到,但你可以在使用-d
选项解压缩时指定这一点。
是的!这是编辑,我突然想到也许您是在谈论 gz、xz、bzip2?如果是这样,您需要先存档它们,它们没有像 tar 那样的文件系统概念。zip、rar、7z,它们都做类似的事情。
答案2
在 ZIP 文件格式中,文件路径始终是相对的,例如这:
file name: (Variable) The name of the file, with optional relative path. The path stored should not contain a drive or device letter, or a leading slash. All slashes should be forward slashes '/' as opposed to backwards slashes '\' for compatibility with Amiga and Unix file systems etc.
当然,可以修补 ZIP 文件以强制使用前导斜杠,但所有常规应用程序通常都受到保护以防止这种明显的黑客攻击(*)。
(*) 更令人讨厌的黑客攻击是长度接近无限的文件,由连续的 0 组成,编码为几个字节。解压缩该文件通常会使您的机器崩溃。现在所有 ZIP 处理实用程序都会检测到这种情况。