Linux上的zip命令如何强制仅压缩文件而不是整个目录结构?

and*_*abs 5 linux zip

我想要的只是愚蠢、简单的事情。ZIP 给定目录的所有内容。

\n\n

我得到的结果是:

\n\n
zip -r /home/andi/MEDIA_DUMPS/xyz_media.zip /home/andi/xyz/mega_backend/mega_www/media\n
Run Code Online (Sandbox Code Playgroud)\n\n

如下:

\n\n
\xe2\x9e\x9c  home  tree -L 5\n.\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 andi\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 xyz\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mega_backend\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mega_www\n                \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 media\n                    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 csv\n                    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 editor\n                    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 img\n
Run Code Online (Sandbox Code Playgroud)\n\n

虽然我想要的只是这个:

\n\n
\xe2\x9e\x9c  media  tree -L 1\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 csv\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 editor\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 img\n
Run Code Online (Sandbox Code Playgroud)\n\n

我使用 Tar 的临时方法:

\n\n
tar -cjf /home/andi/MEDIA_DUMPS/xyz_media.tar.gz -C /home/andi/xyz/mega_backend/mega_www/media .\n
Run Code Online (Sandbox Code Playgroud)\n\n

基于:/sf/ask/1307711681/

\n

Dav*_*ill 7

如何仅压缩文件而不压缩整个目录结构?

使用-j(垃圾路径)选项。


zip:打包并压缩(存档)文件

-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).
Run Code Online (Sandbox Code Playgroud)

...

您可能想要制作一个包含 foo 中的文件的 zip 存档,而不记录目录名称 foo。

您可以使用 -j 选项来省略路径,如下所示:

zip -j foo foo/*

zip:打包并压缩(存档)文件

  • 或者当使用像“(skipped)/media”这样的路径和“-jr”而不是“-j”和“(skipped)/media/*”时,我收到类似以下错误:“zip文件中的名称重复:.gitignore”是使用 -j zip 错误的结果:命令参数无效(不能在 zip 文件中重复名称)` (2认同)