linux 下怎么样用 zip 批量压缩多个 [子目录下] 的文件,并且不包含该子目录?

2015-11-27 00:10:55 +08:00
 v2htm

假设有 A 、 B 、 C 等目录,分别包含 1 、 2 、 3 、 a 、 b 、 c 等文件或目录,现在需要分别把 1\2\3\a\b\c 这些文件用 zip 压缩,文件名为“相应的目录.zip ”,但不能包含 A 、 B 、 C 等目录本身,还不能改变目录结构。

感觉很容易的问题,一直搞不定,要么所有文件都被单独压缩了,要么 A 、 B 、 C 等文件夹直接被压缩了

7163 次点击
所在节点    程序员
10 条回复
yuelang85
2015-11-27 00:25:34 +08:00
for i in `find ./* -type d`;do zip $i.zip ./$i/*;done
v2htm
2015-11-27 00:31:58 +08:00
@yuelang85 仰视。。。。你低头闻闻自己的肩膀,看有没有牛逼的味道
我弄了几个小时都没搞定。当然,我是三脚猫
yuelang85
2015-11-27 00:34:57 +08:00
抱歉,刚刚那个还是包含目录了,这个可以:

for i in `find ./* -type d`;do zip $i.zip `find $i -type f`;done
v2htm
2015-11-27 00:43:58 +08:00
@yuelang85 奇怪 我试了一下,还是包含了目录,是要在当前目录运行对吧?
v2htm
2015-11-27 00:48:27 +08:00
@yuelang85 哦,简单的测试环境可能看不出来,实际 ABC 每个目录下都有至少三层,每层可能都有文件和目录,我想实现的是相当于在目录 A 下全选所有文件、目录,右键压缩为 zip
yuelang85
2015-11-27 00:56:37 +08:00
@v2htm 如果是三层:

for i in `find ./* -type d`;do zip $i.zip `find $i | grep -v "$i$"`;done

这个我用 unzip 测试是可以的,但是有些 gui 工具会创建一个新的子目录(比如 mac 自带的 zip 解压)
v2htm
2015-11-27 01:09:29 +08:00
@yuelang85 恩,可以了,非常感谢!
yuelang85
2015-11-27 01:16:47 +08:00
@v2htm 不客气
msg7086
2015-11-27 05:55:30 +08:00
到目录里面压缩就行了。无非就是 for 循环里 pushd 一下,压缩完再 popd 就好。
linhua
2015-11-27 15:47:32 +08:00
如果要求通用性的话,也可以用 python 快速实现。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/239270

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX