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