zip 命令实现批量文件压缩

需求

以 Linux 搭建的 ftp 服务器的空间有限,之前大量的 log 文件通过无压缩方式上传,现在需要压缩它们以节省空间。

目录结构如下,需要逐个遍历 test 下的所有目录,并将所有目录下的子目录打压缩包,然后删除源文件夹:
图1
图2

思考
  • 写代码来实现,比如 java
  • 利用 Linux 强大的工具集,比如 zip
实施

这种情况下利用现成工具,减少核心代码出错的机会,也能快速部署。所以选择 shell 脚本

#! /bin/bash

for i in `ls -F | grep "/$"|grep target`
do
   echo handle $i
   cd $i
   for j in `ls -F | grep "/$"`
   do
      echo   zip $j
      zip -q -r ${j%/*}.zip $j
      if [ $? -eq 0 ]; then
         rm -rf $j
      fi
   done
   cd ..
done

实现逻辑比较简单,通过 ls 列出所有目录,再将其作为参数调用 zip 来完成压缩工作。这里要注意几个点:

  • 列出目录的时候会带上斜杠 / ,所以要截取字符串 ${j%/*}
  • 删除文件夹之前要判断 zip 是否成功,不成功切不可贸然删除源文件夹
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值