当我使用 zip 打包来自不同位置的文件时,例如:
zip pack.zip /home/jack/jack.txt /home/jim/jim.txt
这些文件将存储在“pack.zip”中,结构如下:
./home/jack/jack.txt
./home/jim/jim.txt
但这不是我所期望的。我只是希望这些文件存储在 zip 文件的根目录中,例如:
./jack.txt
./jim.txt
我应该怎么办?
答案1
使用-j
zip 选项来删除(垃圾)路径:
-j
--junk-paths
仅存储已保存文件的名称(垃圾路径),不存储目录名称。默认情况下,zip 将存储完整路径(相对于当前目录)。
例子
例如,假设我们有这些文件:
$ ls */
a/:
file
b/:
file2
我们用以下命令压缩它们-j
:
$ zip -j new.zip */*
adding: file (stored 0%)
adding: file2 (stored 0%)
它们被存储没有路径:
$ unzip -l new.zip
Archive: new.zip
Length Date Time Name ("^" ==> case
--------- ---------- ----- ---- conversion)
0 2014-10-21 22:15 file
0 2014-10-21 22:14 file2
--------- -------
0 2 files
具有相同基本名称的文件将生成错误
请注意,使用 时-j
,如果来自不同路径的两个文件具有相同的名称,则会出错:
$ zip -j new2.zip */*
zip warning: first full name: a/file
second full name: b/file
name in zip file repeated: file
this may be a result of using -j
zip error: Invalid command arguments (cannot repeat names in zip file)
答案2
zip 实用程序具有以下选项--junk-path
:
$ zip --junk-path pack.zip home/jack/jack.txt home/jim/jim.txt
adding: jack.txt (stored 0%)
adding: jim.txt (stored 0%)
$ unzip -l pack.zip
Archive: pack.zip
Length Date Time Name
--------- ---------- ----- ----
0 2014-10-22 07:12 jack.txt
0 2014-10-22 07:12 jim.txt
--------- -------
0 2 files