Re: [问题] Linux下Bash批次更改档名(数百、千个档)

楼主: losepacific (Losepacific)   2017-08-16 04:07:06
※ 引述《Vett (Vett)》之铭言:
: ※ 引述《weakstudy (台湾高阶管理人)》之铭言:
: : 小弟刚接触Linux下的Ubuntu系统,用的是Bash,
: : 话说某天,某个学长经过我的座位看我一个档点一下后,按F2,再更改档名,
: : 然后换下一个,他看了我改了五、六个档吧,
: : 终于受不了了,“学弟啊!这种东西,你写个Bash就可以在30秒内搞定它了!”,
: : 我眼睛发光的看着他,但是他在赶论文,随手指著一个同学(女的)学姐,
: : 她也会写Bash,不会的请教她,
: : 然就就飘回自已的座位写论文了,
: : 真的是“飘”回去 … 好像刚才那一段对话从来没有发生过,
: : 学姐也看都没看我一眼,
: : 我 … 好想写个“惨”字 …
: : 好了,前情提要就是这样 …
: : 接下来就是我现在面对的情况:
: : 我有个资料夹…就叫它“OnePiece”吧
: : 里面有…
: : “海贼王 第1集 繁体中文翻译.mp4”
: : “海贼王 第2集 繁体中文翻译.mp4”
: : “海贼王 第3集 繁体中文翻译.mp4”
: : “海贼王 第4集 繁体中文翻译.mp4”
: : “海贼王 第5集 繁体中文翻译.mp4”
: : …
: : “海贼王 第51集 繁体中文翻译.mp4”
: : “海贼王 第52集 繁体中文翻译.mp4”
: : “海贼王 第53集 繁体中文翻译.mp4”
: : “海贼王 第54集 繁体中文翻译.mp4”
: : “海贼王 第55集 繁体中文翻译.mp4”
: : …
: : “海贼王 第796集 繁体中文翻译.mp4”
: : “海贼王 第797集 繁体中文翻译.mp4”
: : “海贼王 第798集 繁体中文翻译.mp4”
: : “海贼王 第799集 繁体中文翻译.mp4”
: : “海贼王 第800集 繁体中文翻译.mp4”
: : …
: : 因小弟Bash功力低浅,故特来网上求教各高手、神级人物,是否可以写一个Bash帮忙更改
: : 档名的呢?
: : 但希望是集数的数字可以留下来,
: : 也就是如“海贼王 第800集 繁体中文翻译.mp4”可以变成“OnePiece v800.mp4”?
: : 久闻PTT高手如云,又愿意伸出援手,小弟这次真心想要请求帮忙,如不嫌弃,请助小弟
: : 一臂之力!
: : 小弟将来实力长成,必像大众高手一样尽力不计酬劳帮忙真心需要帮忙之人!
: : 成谢再三!
: 伸手党还写了这么长...
: #!/bin/bash
: for i in `ls`; do
: NUM=`echo $i|sed -n 's/.*第\(.*\)集.*/\1/p'`
: mv $i "OnePiece v$NUM.mp4"
: done
rename -e 's/^.+(\d+).+\.mp4/OnePiece v$1.mp4/' *
其中的【^.+(\d+).+\.mp4】为正规表式法,因为贪多,我视为刀法。
【^】是代表开头的位置。
【.】在正规表式法中,代表任一字符。
【+】在延伸正规表式法中代表前一个字有一个到无限多个,比如说:
【a+】代表【a】【aa】【aaa】【aaaa】...在有限的计算机世界往无限冲刺。
【(】群组吻合物的开头范围标示,把吻合的东西暂时存放到某处。
【\d】代表任一个数字。
【)】群组吻合物的结尾范围标式。
【\.】因为【.】代表任一个字,所以想要表达【.】这个字符本身的时候就要
在前头加反斜【\】
【s/正规表式法/文字$1文字/】其中【s】意味取代,把【//】之间吻合正规表式法的
内容取代成后者【文字$1文字】其中【$1】会由正
规表式法【()】吻合的内容代入。
【^.+】会削下【海贼王 第】
【(\d+)】会画开【1..800】
【.+】再砍【集 繁体中文翻译】
【\.mp4】是尾刀。
#!/bin/bash #这行是告诉系统要用bash执行这个脚本。
for i in `ls`; do #这行是循环的范围,它会把ls输出的东西展开成参数
#再把参数一个一个代入i这个变量。
NUM=`echo $i|sed -n 's/.*第\(.*\)集.*/\1/p'` #``里输出的东西会
#被代入NUM这个变量
mv $i "OnePiece v$NUM.mp4" #【$】是取用变量的方式
done
如果只有数百数千个档案要改,那可以放下刀,打开LibreOffice的Calc
在A1栏输入:
'海贼王 第
在B1栏输入:
1
在C1栏输入:
集 繁体中文翻译.mp4'
D1:
'OnePiece v
E1:
.mp4'
F1:
="mv "&A1&B1&C1&" "&D1&B1&E1
请留意且精确的输入你所需要的空格,虽然它们不容易被看见。
接着就把这几栏拉到几百几千后,复制F栏的内容到纯文字编辑器,
补上第一行:
#!/bin/bash
存盘,改成可执行。
作者: akccakcctw (947)   2017-08-17 09:13:00
推!
作者: Debian (Debian)   2017-08-17 05:19:00
赞赞的推荐文章。
作者: yuigahamayui (由比ヶ浜 结衣)   2017-08-16 14:30:00
这招猛xD
作者: ddtsatan   2017-08-16 14:38:00
作者: cout (:pppp)   2017-08-16 15:11:00
推,好清楚
作者: wayne1120 (QQ)   2017-08-16 22:17:00
谢谢分享!!

Links booklink

Contact Us: admin [ a t ] ucptt.com