Linux下Bash批次更改檔名(數百、千個檔) - Linux

Genevieve avatar
By Genevieve
at 2017-08-16T04:07

Table of Contents

※ 引述《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
存檔,改成可執行。

--
Tags: Linux

All Comments

Gilbert avatar
By Gilbert
at 2017-08-21T03:22
這招猛xD
Kyle avatar
By Kyle
at 2017-08-25T13:38
Noah avatar
By Noah
at 2017-08-26T05:37
推,好清楚
Olga avatar
By Olga
at 2017-08-26T14:49
謝謝分享!!
Blanche avatar
By Blanche
at 2017-08-29T18:55
讚讚的推薦文章。
Rebecca avatar
By Rebecca
at 2017-09-03T14:08
推!

請問Markdown在引用文字中加粗體的語法

Franklin avatar
By Franklin
at 2017-08-14T15:33
最近把wordpress轉到 Hexo 去了 因為跟大多數的軟體一樣,Wordpress越來越肥... 現在正在練習markdown的語法 但是有個東西一直測試不出來,想請教各位看看 在markdown語法中,行首空四格可以把後面的文字作縮排 裡面的一些特殊符號都會被當作一般文字,不會被處理 但是我如果想 ...

ubuntu in usb一些問題

Genevieve avatar
By Genevieve
at 2017-08-13T13:08
我安裝的方法是用一個2GB的usb當作liveusb 裝在另一個64GB的usb上 我有先用gparted把64GB切成3部分: /dev/sdb1: 15(fat32) and#34;/dataand#34; , 一般資料儲存用 /dev/sdb5: 48(ext4) and#34;/and#34; , ...

關於Tomcat的port 號

Enid avatar
By Enid
at 2017-08-13T12:23
※ [本文轉錄自 MAC 看板 #1PZzFMC7 ] 作者: chiang0514 (ethan0514) 看板: MAC 標題: [求救] 關於Tomcat的port 號 時間: Sun Aug 13 12:21:38 2017 本來應該是預設8080 但自己在活動檢視器裡面, 找到的卻不是8080 ...

1

Eden avatar
By Eden
at 2017-08-12T12:22
最近在找合適的的小裝置來裝linux 看上了一個東西,鴻海的便當盒, 588+999=1587 一年後不想使用,還可以退回999-150=849, 感覺甚至比pi3還便宜, 所以想問問,有強者把linux最好是ubuntu系列的寫到便當盒內嗎? 而且螢幕網路藍牙都正常可使用... - ...

無法讀取外接硬碟 WD My Passport

Frederic avatar
By Frederic
at 2017-08-12T11:50
大家好。 我使用的 Linux 是 Antergos。 這顆外接硬碟(WD My Passport)已經經歷過 Ubuntu、Linux Mint,到現在的 Antergos 。 之前使用都沒有問題,直到最近開始無法讀取。 檔案總館裡,可以看到 My Passport 的標識。 如果按滑鼠右鍵的話, ...