我需要用这个命令创建一个zip文件:

zip /dir/to/file/newZip /data/to/zip/data.txt

这是可行的,但是创建的zip文件创建了一个目录结构,模拟原始文件的目录。这是很多我不需要的额外文件夹。

我并没有在手册页或谷歌搜索中找到答案。


当前回答

使用-j选项:

   -j     Store  just the name of a saved file (junk the path), and do not
          store directory names. By default, zip will store the full  path
          (relative to the current path).

其他回答

使用-j不能与-r选项一起使用。 所以变通方法是这样的:

cd path/to/parent/dir/;
zip -r complete/path/to/name.zip ./* ;
cd -;

或内联版本

cd path/to/parent/dir/ && zip -r complete/path/to/name.zip ./* && cd -

如果不希望CD输出显示在屏幕上,可以将输出指向/dev/null

只需使用-jrm选项删除文件和目录 结构

zip -jrm /path/to/file.zip /path/to/file

你可以用-j。

-j
--junk-paths
          Store just the name of a saved file (junk the path), and do  not
          store  directory names. By default, zip will store the full path
          (relative to the current directory).

使用-j选项:

   -j     Store  just the name of a saved file (junk the path), and do not
          store directory names. By default, zip will store the full  path
          (relative to the current path).

保留父目录,这样解压缩时就不会到处都是文件

压缩目录时,将父目录保留在归档文件中将有助于避免稍后解压缩归档文件时乱扔当前目录

所以为了避免保留所有路径,并且因为你不能同时使用-j和-r(你会得到一个错误),你可以这样做:

cd path/to/parent/dir/;
zip -r ../my.zip "../$(basename "$PWD")"
cd -;

“. ./$(basename "$PWD")"是保留父目录的魔法。

所以现在解压缩my.zip会给出一个包含你所有文件的文件夹:

parent-directory
├── file1
├── file2
├── dir1
│   ├── file3
│   ├── file4

而不是乱扔当前目录与解压缩文件:

file1
file2
dir1
├── file3
├── file4