You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化重复Bash循环脚本:实现目录文件压缩并删除源文件

优化Bash脚本并实现递归压缩方案

一、优化现有重复循环的脚本

原脚本用重复for循环处理每个目录,我们可以通过遍历目标目录列表或者匹配目录模式来简化代码,彻底消除冗余。

方案1:遍历指定目录数组

把需要处理的目录统一放到数组中,用单次循环完成所有操作:

#!/bin/bash
# 定义需要处理的目标目录数组
target_dirs=(/home/gowmi/UserA /home/gowmi/UserB /home/gowmi/UserC)

for dir in "${target_dirs[@]}"; do
    # 先检查目录是否存在,避免报错
    if [ -d "$dir" ]; then
        # 压缩目录下的所有txt文件,gzip默认会删除源文件
        gzip "$dir"/*.txt
    fi
done

方案2:匹配目录通配符

如果目录命名有规律(比如都是User开头),直接用通配符匹配更简洁:

#!/bin/bash

for dir in /home/gowmi/User*; do
    if [ -d "$dir" ]; then
        gzip "$dir"/*.txt
    fi
done

二、实现递归压缩目录及文件

要递归处理所有子目录里的文件,有两种实用方式:

方式1:用find+gzip递归压缩单个文件

适合需要单独压缩每个文件、保留目录结构的场景:

#!/bin/bash
# 递归压缩/home/gowmi下所有txt文件,压缩后自动删除源文件
find /home/gowmi -type f -name "*.txt" -exec gzip {} \;
  • -type f:仅处理文件,跳过目录
  • -name "*.txt":匹配目标文件后缀,可根据需求修改
  • -exec gzip {} \;:对每个找到的文件执行压缩操作

方式2:用tar递归打包压缩整个目录

适合需要把整个目录结构打包成单个压缩包的场景:

#!/bin/bash
# 将/home/gowmi目录递归打包并压缩为gowmi_backup.tar.gz
tar -czf gowmi_backup.tar.gz /home/gowmi

# 如果需要压缩后删除原目录,添加--remove-files参数
# tar -czf gowmi_backup.tar.gz --remove-files /home/gowmi
  • -c:创建新的归档文件
  • -z:使用gzip算法压缩
  • -f:指定归档文件的名称

三、额外优化建议

  • 添加错误处理,避免脚本静默失败:
if ! gzip "$dir"/*.txt; then
    echo "压缩目录$dir下的文件失败" >&2
fi
  • 如果需要保留源文件,给gzip添加-k参数(gzip -k file.txt)

内容的提问来源于stack exchange,提问作者Gowmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:32:16