美文网首页Linux学习与应用技巧
使用 shell 脚本批量处理文件

使用 shell 脚本批量处理文件

作者: 菜鸟很浮夸 | 来源:发表于2020-05-13 15:11 被阅读0次

从网上自动下载的电影字幕文件中,大部分是srt,ass\ssa 这类的文本文件,另外有些是压缩包(目前只有 rar 和 zip)。需要批量解压这些文件,并清理不合格文件和目录。
我大概想了想,shell 脚本应该是相对轻量、简单而且代码量小的方式了,于是写了这个我平生第一个有用的 shell 脚本

脚本功能:遍历 subtitle 目录,然后在电影目录下的英文(eng)目录执行一些操作:

  • 如果是压缩文件,解压
  • 清理子目录
  • 清理压缩包
  • 清理多文件目录
  • 清理非指定格式文件
  • 更新数据库
#!/bash/bin
source ./mysql.sh

for dir in `ls subtitle`
do
    echo 正在处理 $dir
    dir_eng=subtitle/$dir/eng
    if [ -d $dir_eng ]; then
        file=`ls $dir_eng `
        # 解压 zip 和 rar, overwrite mode
        if [[ "$file" =~ zip$ ]]; then
            unzip -q  -o "$dir_eng/*.zip" -d $dir_eng
        elif [[ "$file" =~ rar$ ]]; then
            rar  x -inul -o+ "$dir_eng/*.rar" -d $dir_eng 
        fi
        echo  '  已解压'

        #### 解压后,处理目录:  ####

        # 1. 删除 eng 下的所有目录
        dir_in_eng=`ls -l $dir_eng | grep -E "^d"`
        if [ "$dir_in_eng" != "" ]; then
            find $dir_eng/* -type d  | xargs rm -rf
        fi

        # 2. 删除所有压缩文件
        rm -f $dir_eng/*.{zip,rar}

        # 3. 清空多文件目录
        file_num=`ls $dir_eng | wc -l`
        if [ $file_num -gt 1 ]; then
            rm $dir_eng/*
        fi

        # 4. 不是 srt 和 ass/ssa 的文件删除
        # grep 貌似不支持环视, -P 使用 Perl 语法
        err_file=`ls $dir_eng | grep -Po '.*(?<!srt|ass|ssa)$'`
        if [ -n "$err_file" ]; then
            rm -f $dir_eng/$err_file
        fi

        echo '  文件清理已完成'
    fi

    # 5. 空目录需要更新数据库
    file_num=`ls $dir_eng | wc -l`
    if  [ "$file_num" = "0" ]; then
        mysql $SQLINFO "UPDATE subtitle SET subtitle_eng='' WHERE zmk_id = $dir"
        echo '  数据库已更新'
    fi
    echo -e '  子任务结束\n'
done

相关文章

  • 批量处理文件迁移

    批量迁移(使用shell脚本) 新建一个文件用于需要迁移的项目名称及路径 编写脚本用与批量处理git镜像命令

  • 使用 shell 脚本批量处理文件

    从网上自动下载的电影字幕文件中,大部分是srt,ass\ssa 这类的文本文件,另外有些是压缩包(目前只有 rar...

  • (转)iOS使用shell脚本批量修改属性

    iOS使用shell脚本注入混淆内容iOS使用Shell脚本批量修改类名称iOS使用shell脚本批量修改属性 h...

  • 大数据学习-Linux Shell脚本快速入门

    批量处理数据,难免会有在集群中使用Shell脚本,自动跑程序,下面快速入门Shell脚本编程,本文解决一下问题: ...

  • linux扩展名表示

    *.sh : 脚本戒批处理文件 (scripts),因为批处理文件为使用 shell 写成的,所以扩展名就编成 ....

  • Shell编程--case,for,while,until

    shell多分支case语句 for循环 语法一: 批量压缩文件脚本 语法二: 从1加到100 批量添加用户 批量...

  • shell脚本实现FTP上传下载

    下载单个文件脚本代码 上传单个文件脚本代码 批量下载脚本代码 批量上传脚本代码 命令解释 登录FTP << 是使用...

  • shell脚本编程

    一、构建基本脚本 创建shell脚本文件 在创建shell脚本文件时,必须在文件的第一行指定要使用的shell。其...

  • Linux命令行与Shell脚本编程大全-构建基本脚本

    本章内容: 构建基本脚本 使用多个命令 创建shell脚本文件 构建基本脚本 在构建shell脚本文件时,必须在文...

  • shell语言

    第一个脚本程序 shell脚本文件使用.sh作为文件后缀; 在脚本文件中的第1行使用#!指明shell解释器; 对...

网友评论

    本文标题:使用 shell 脚本批量处理文件

    本文链接:https://www.haomeiwen.com/subject/xnvnnhtx.html