压缩文件夹的内容而不包括文件夹本身

Jui*_*icy 160 command-line zip

我有一个名为的目录folder,如下所示:

folder
      -> root_folder
                    -> some files
Run Code Online (Sandbox Code Playgroud)

我想把这个目录压缩到zipped_dir,我试过:

zip -r zipped_dir.zip folder/*
Run Code Online (Sandbox Code Playgroud)

但这会生成一个看起来像这样的 ZIP:

zipped_dir
          -> folder
                   -> root_folder
                                 -> some files
Run Code Online (Sandbox Code Playgroud)

换句话说,它包括我想要压缩其内容的目录。如何在不移动任何内容的情况下从 ZIP 中排除此父目录?

IE 我想要这个最终结果:

zipped_dir
          -> root_folder
                        -> some files
Run Code Online (Sandbox Code Playgroud)

Rom*_*nov 139

尝试使用这个命令(你会明白的)

cd folder; zip -r ../zipped_dir.zip *
Run Code Online (Sandbox Code Playgroud)

也许还有其他方法,但这对我来说是最快和最简单的:)

  • @TobiasKolb,也许您没有阅读问题。OP 不想将 **folder** 放入 zip 中的存储路径。 (7认同)
  • 小补充:使用 (cd 文件夹; zip -r ../zipped_dir.zip *) - () 在子 shell 中运行命令,因此不会更改您的目录 (4认同)
  • 似乎是唯一的方法 (3认同)
  • 这不会添加隐藏文件 (3认同)
  • 这完美地完成了这个技巧。注意:它会做一个`chroot`。 (2认同)

小智 71

使用-j; 例如:zip -r -j zipped_dir.zip folder/*

它不会压缩“root_folder”。

  • OP 可能只希望删除父目录,而不是全部删除。 (36认同)
  • `-j` 选项消除所有目录信息,只保存文件。也就是说,以“平面”的方式将所有文件存储在一个目录下。 (12认同)
  • 如果我有两个同名文件,我会收到此错误。 (8认同)
  • 这不应该是公认的答案 (8认同)
  • 它也展平了子目录文件。 (6认同)

小智 11

zip -r -D zipped.zip *
Run Code Online (Sandbox Code Playgroud)

-D 指示 zip 不创建目录。


Mar*_* An 9

这对我有用:

7z a zipped.zip ./rootDir/*
Run Code Online (Sandbox Code Playgroud)

它将创建一个zip带有 root的存档:任何文件/目录中的rootDir. 例如

zipped.zip:
     file1.txt
     otherdir/
        file2.txt
Run Code Online (Sandbox Code Playgroud)

隐藏文件:

正如在@Shiva Wu评论中正确指出的那样,上述内容不包括隐藏文件

也为答案的其余部分的情况下(至少其中保存目录结构的那些)。一种解决方案是显式添加隐藏路径通配符

zipped.zip:
     file1.txt
     otherdir/
        file2.txt
Run Code Online (Sandbox Code Playgroud)

或者

# The command below will include all files and directories starting with a dot.
7z a zipped.zip ./rootDir/* ./rootDir/.[!.]*
Run Code Online (Sandbox Code Playgroud)

结果:

zipped.zip:
     file1.txt
     .hiddenfile1.txt
     .hiddendir/
        file3.txt
     otherdir/
        file2.txt
Run Code Online (Sandbox Code Playgroud)