找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 17323|回复: 10

[问题求助] 求分批打包文件夹的Shell脚本

[复制链接]
发表于 2019-6-20 12:16:35 | 显示全部楼层 |阅读模式
某个文件夹有200个mp3,要求每20个打包成一个包,一共是10个能够独立解压的压缩包。
最好打包好的文件包括原来的文件夹。
 楼主| 发表于 2019-6-20 18:08:57 | 显示全部楼层
本帖最后由 netdzb 于 2019-6-20 18:12 编辑

回复 1# netdzb


我自己写的脚本,看看有问题吗?

200首歌曲,打包成20个压缩包,
可以单独解压。

#!/bin/bash
for FILE in (*.mp3)
    do
       count = 0
       while [ $count -lt 10 ]
       do
       songs = 0
       rar a -ep $songs $FILE
       count = $((count + 1))
       songs = $((songs + 1))
    done
done
 楼主| 发表于 2019-6-20 18:20:59 | 显示全部楼层
回复 1# netdzb

又改了一下,看看有问题吗?

#!/bin/bash
for FILE in (*.mp3)
songs = 0
do
       count = 0
       while [ $count -lt 10 ]
       do
       rar a -ep $songs $FILE
       count = $((count + 1))
       done
       songs = $((songs + 1))
done
 楼主| 发表于 2019-6-20 22:31:06 | 显示全部楼层
回复 3# netdzb

#!/bin/bash
let songs=0
for FILE in *.mp3
do
       let count=0
       while ((count<30));
       do
          rar a -ep $songs.rar $FILE
          let count+=1
       done
       let songs+=1
done

代码没问题了,运行结果不对。看来还得改啊。
发表于 2019-6-20 22:42:09 | 显示全部楼层
回复 4# netdzb


    不要用 while 做判断,用 if 判断试试。
 楼主| 发表于 2019-6-20 23:07:12 | 显示全部楼层
回复 5# Batcher

#!/bin/bash
let songs=0
for FILE in *.mp3
do
       let count=0
       while ((count<30));
       do
          rar a -ep $songs.rar $FILE
          ~~~~~~~~~~~~~~~~~
          这里改成 rar a -ep songs.rar $FILE
          部分就对了,那样只会压缩成一个包。如果按照上面写会被压缩成200个压缩包,和我的要求不符合
          哪里有不对啊。  
          let count+=1
       done
       let songs+=1
done
 楼主| 发表于 2019-6-21 07:16:01 | 显示全部楼层
回复 5# Batcher

搞定了,不过还是有问题。打包的速度太慢了,和gui添加文件压缩的速度没法比,太慢了。405个文件,用这个脚本用了一个小时。双核笔记本,移动
sata硬盘。

#!/bin/bash
let songs=0
let count=0
for FILE in *.mp3
do
       if ((count<30)); then  
          rar a -ep $songs $FILE
          let count+=1
       else
          let count=0
          let songs+=1
       fi   
done
发表于 2019-6-21 12:32:42 | 显示全部楼层
回复 7# netdzb


优化的思路是减少 rar 命令执行的次数
  1. #!/bin/bash
  2. let songs=0
  3. let count=0
  4. FileList=""
  5. for FILE in *.mp3; do
  6.     let count+=1
  7.     FileList="$FileList $FILE"
  8.     if [[ $count == 30 ]]; then
  9.         rar a -ep $songs.rar $FileList
  10.         FileList=""
  11.         let songs+=1
  12.         let count=0
  13.     fi
  14. done
  15. rar a -ep $songs.rar $FileList
复制代码
 楼主| 发表于 2019-6-21 12:55:45 | 显示全部楼层
回复 8# Batcher

这个脚本改成7z可以吗? 7z有没有文件列表呢?
发表于 2019-6-21 12:58:17 | 显示全部楼层
回复 9# netdzb


    可以。有的。
 楼主| 发表于 2019-6-21 19:53:33 | 显示全部楼层
回复 8# Batcher

谢谢,这个脚本执行速度很快,10分钟内搞定了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:24 , Processed in 0.019173 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表