分页: 1 / 3

求助关于批量改文件的扩展名

发表于 : 2011-07-09 8:59
anguste
出于某种诡异的原因我的下载机(MSS)会把任何大于2G的文件自动分割成不大于2G一个的文件

假设有个7G的a.mkv,我最终获得的是a.mkv000,a.mkv001,a.mkv002,a.mkv003这样4个文件

现在我已知有个叫HJSplit的软件 可以把这类文件合并起来,前提是他们是这样的文件名结构
a.mkv.001,a.mkv.002,a.mkv.003,a.mkv.004
这样合并后会自动生成一个a.mkv文件

请问用什么脚本可以实现这样的操作呢?如果文件数量太多,手动改名实在是太让人崩溃了。。。

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-09 9:54
MaskRay
分割

代码: 全选

split -a 3 -b 2000m
max 1p split 看用法

---

合并

代码: 全选

setopt numericglobsort && cat * > file
zsh 的

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-09 10:26
ubuntu1023
分割成的文件1个2G,不会太多,高清也就5、6个,手动修改扩展名即可

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-09 11:46
anguste
MaskRay 写了:分割

代码: 全选

split -a 3 -b 2000m
max 1p split 看用法

---

合并

代码: 全选

setopt numericglobsort && cat * > file
zsh 的
呃,我没有问分割合并的方法,只是想批量把文件名给改了

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-09 11:46
anguste
ubuntu1023 写了:分割成的文件1个2G,不会太多,高清也就5、6个,手动修改扩展名即可
以前是手动改的,但是片子多了太痛苦了

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-09 21:13
eexpress
你目的不就是分割合并嘛。

是已经下载的文件,就是那种后缀名?如果是这情况,你可以看下

rename 's/mkv/mkv\./' a.*

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-10 3:20
fnan
设文件在b文件夹,a.mkv000 改成 a.mkv_001 ,要加_不然就把另外的文件覆盖了,数字不必要连续,全部加一:
kose5@kose5-Aspire-4552:~$ cd b;ls -1|while read n;do a=($(sed 's#\(.*\)\([0-9]\{3\}\)$#\1 \2#' <<<$n ));mv $n ${a[0]}"_"$(printf "%03d" $((${a[1]/#?(0|00)}+1)));done;cd

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-10 10:58
anguste
fnan 写了:设文件在b文件夹,a.mkv000 改成 a.mkv_001 ,要加_不然就把另外的文件覆盖了,数字不必要连续,全部加一:
kose5@kose5-Aspire-4552:~$ cd b;ls -1|while read n;do a=($(sed 's#\(.*\)\([0-9]\{3\}\)$#\1 \2#' <<<$n ));mv $n ${a[0]}"_"$(printf "%03d" $((${a[1]/#?(0|00)}+1)));done;cd

代码: 全选

ls -1|while read n;do a=($(sed 's#\(.*\)\([0-9]\{3\}\)$#\1 \2#' <<<$n ));mv $n ${a[0]}"."$(printf "%03d" $((${a[1]/#?(0|00)}+1)));done
此法可行,感激涕零!!!

在我的实际应用中把_替换成.了

想问下如果文件名不是a,应该改哪些地方?

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-10 11:15
ChenFengyuan
anguste 写了:
fnan 写了:设文件在b文件夹,a.mkv000 改成 a.mkv_001 ,要加_不然就把另外的文件覆盖了,数字不必要连续,全部加一:
kose5@kose5-Aspire-4552:~$ cd b;ls -1|while read n;do a=($(sed 's#\(.*\)\([0-9]\{3\}\)$#\1 \2#' <<<$n ));mv $n ${a[0]}"_"$(printf "%03d" $((${a[1]/#?(0|00)}+1)));done;cd

代码: 全选

ls -1|while read n;do a=($(sed 's#\(.*\)\([0-9]\{3\}\)$#\1 \2#' <<<$n ));mv $n ${a[0]}"."$(printf "%03d" $((${a[1]/#?(0|00)}+1)));done
此法可行,感激涕零!!!

在我的实际应用中把_替换成.了

想问下如果文件名不是a,应该改哪些地方?
你直接把ee给出的忽略了呀。。。。。。
重命名,最nb的就是rename(perl版本的),没有之一.
debian里貌似装了perl就有带,
这么长的一段代码.......

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-10 11:16
ChenFengyuan
eexpress 写了:你目的不就是分割合并嘛。

是已经下载的文件,就是那种后缀名?如果是这情况,你可以看下

rename 's/mkv/mkv\./' a.*
此处.无需转义

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-10 11:18
ChenFengyuan
MaskRay 写了:分割

代码: 全选

split -a 3 -b 2000m
max 1p split 看用法

---

合并

代码: 全选

setopt numericglobsort && cat * > file
zsh 的
都001,002,就无所谓numericglobsort了吧.
如果楼主的那个啥软件是简单的分割的,好像split,根本不用啥xxx软件,就像maskray说的,直接cat *>foo即可.
也不用改名了.
楼主有没有文件效验的?合成之后效验即可.

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-10 11:28
ChenFengyuan
非得用shell的话
for a in *;do mv -v $a $(echo $a|sed -e 's/mkv/mkv./');done
dash都支持,估计没问题了.

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-10 11:29
lainme
确实,你的目的就是合并。改名是为了用那个专门的软件来做合并这件事。

但其实你不该名,用cat就合并了,何必多做一步

想这样的结构:a.mkv000,a.mkv001,a.mkv002,a.mkv003

直接

cat a.mkv* > a.mkv

就可以了

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-10 11:38
ChenFengyuan
或者如果你用zsh或bash,
应该可以
for i in *;do mv -v $i ${i/mkv/mkv./};done

Re: 求助关于批量改文件的扩展名

发表于 : 2011-07-10 12:05
ChenFengyuan
lainme 写了:确实,你的目的就是合并。改名是为了用那个专门的软件来做合并这件事。

但其实你不该名,用cat就合并了,何必多做一步

想这样的结构:a.mkv000,a.mkv001,a.mkv002,a.mkv003

直接

cat a.mkv* > a.mkv

就可以了
:em11