zhangjian5255 2024-06-15 08:22 采纳率: 50%
浏览 2

shell循环取文件压缩

比如说一个目录下源源不断在有文件进来,想写个脚本,循环获取目录下文件,每次1000个文件,然后压缩1000文件,再删掉压缩前的文件

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-06-15 08:22
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要实现你的需求,你可以使用以下Shell脚本。这个脚本使用了inotifywait工具来监控文件的变化,这是一个比传统的find命令更高效的监控方式。如果你的系统中没有安装inotify-tools包,你需要先安装它。

    以下是一个基本的脚本示例:

    #!/bin/bash
    
    # 设置监控的目录
    MONITOR_DIR="/path/to/your/directory"
    # 设置压缩文件的存储目录
    COMPRESSED_DIR="/path/to/your/compressed/directory"
    # 设置压缩文件的前缀
    COMPRESSED_PREFIX="compressed_"
    
    # 确保压缩目录存在
    mkdir -p "$COMPRESSED_DIR"
    
    # 监控指定目录,当文件数量达到1000时执行压缩操作
    inotifywait -m -e create --format '%w%f' "$MONITOR_DIR" | \
    while read -r file; do
        # 检查文件数量是否达到1000
        let file_count=$(ls -1 "$MONITOR_DIR" | wc -l)
        if [ "$file_count" -ge 1000 ]; then
            # 压缩文件
            tar -czf "$COMPRESSED_DIR/$COMPRESSED_PREFIX$(date +%Y%m%d%H%M%S).tar.gz" -C "$MONITOR_DIR" *
            # 删除原始文件
            rm -f "$MONITOR_DIR"/*
            # 重置计数器
            let file_count=0
        fi
    done
    

    请注意,你需要替换/path/to/your/directory/path/to/your/compressed/directory为你实际的目录路径。

    这个脚本使用inotifywait来监控目录中的create事件,这意味着每当有新文件被创建时,脚本就会读取这个文件。当文件数量达到1000时,脚本会执行压缩操作,并将压缩文件存储在指定的压缩目录下,文件名包含时间戳以区分不同的压缩文件。压缩完成后,脚本会删除原始目录中的所有文件,并重置文件计数器。

    参考资料

    1. inotify-tools GitHub
    2. Linux inotify 教程
    3. tar 命令手册

    请确保你有权限在指定目录中创建和删除文件,并且脚本具有执行权限。你可以通过运行chmod +x your_script_name.sh来给予脚本执行权限。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月15日

悬赏问题

  • ¥15 工价表引用工艺路线,应如何制作py和xml文件
  • ¥15 根据历史数据,推荐问题类型
  • ¥15 需要仿真图,简单的二阶系统实例
  • ¥15 stm32光控照明仿真
  • ¥15 使用人工智能的方法生成满足一定统计参数要求的随机数序列
  • ¥15 SENT协议中相关问题咨询
  • ¥15 URL地址href跳转问题
  • ¥15 mysql数据库备份恢复
  • ¥15 mmdetection mask-rcnn
  • ¥25 matlab可以将微分方程的解显示为相图形式吗