如何将单独定位的文件打包到同一文件夹结构中?

如何将单独定位的文件打包到同一文件夹结构中?

当我使用 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

使用-jzip 选项来删除(垃圾)路径:

-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

相关内容