不考虑 7z 等其他可取代的命令。
$ tree top
top
├── a.txt
└── b
    └── b.txt
假设我想将 top 下面的两个文件(a.txt, b/b.txt)和一个文件夹(b/)打包到一个 zip 文件,我只能进入这个 top 目录然后再进行压缩:
$ cd top
$ zip -r ../top.zip ./
如果我想在 top 目录之外进行压缩:
$ zip -r top.zip top/
则怎么都不行,-j参数将所有的目录(比如 b/)都去除了。
我期望的 zip entry 是:
a.txt
b/b.txt
不希望是:
top/a.txt
top/b/b.txt
|  |      1jayeli      2024-08-21 19:43:35 +08:00 bsdtar --strip-components=1 | 
|  |      2sagaxu      2024-08-21 20:00:49 +08:00 假设 zip 支持这个特性, zip --strip-components=1 -r top.zip top/ 跟 ( cd top && zip -r ../top.zip ./ ) 有区别? | 
|      3amrnxcdt      2024-08-21 20:11:04 +08:00  1 @sagaxu #2 大概是在批量处理的脚本中可以不切换路径、减少路径到处飞的情况。针对这个情况可以用子进程$(cd && zip) | 
|      4yukafans      2024-08-21 23:44:29 +08:00 via Android popd | 
|  |      5ltux      2024-08-22 09:14:57 +08:00  1 zip 不支持你说的特性。 | 
|  |      6proxytoworld      2024-08-22 09:48:28 +08:00 pushd cd popd |