作者losepacific (Losepacific)
看板Linux
标题Re: [问题] Linux下Bash批次更改档名(数百、千个档)
时间Wed Aug 16 04:07:06 2017
※ 引述《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
存档,改成可执行。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 27.52.193.106
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1502827629.A.E9B.html
1F:推 yuigahamayui: 这招猛xD 08/16 14:30
2F:推 ddtsatan: 推 08/16 14:38
3F:推 cout: 推,好清楚 08/16 15:11
4F:推 wayne1120: 谢谢分享!! 08/16 22:17
5F:推 Debian: 赞赞的推荐文章。 08/17 05:19
6F:推 akccakcctw: 推! 08/17 09:13