Re: [問題] Linux下Bash批次更改檔名(數百、千個檔)

看板Linux作者 (Losepacific)時間8年前 (2017/08/16 04:07), 編輯推噓6(600)
留言6則, 6人參與, 最新討論串3/6 (看更多)
※ 引述《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://www.ptt.cc/bbs/Linux/M.1502827629.A.E9B.html

08/16 14:30, , 1F
這招猛xD
08/16 14:30, 1F

08/16 14:38, , 2F
08/16 14:38, 2F

08/16 15:11, , 3F
推,好清楚
08/16 15:11, 3F

08/16 22:17, , 4F
謝謝分享!!
08/16 22:17, 4F

08/17 05:19, , 5F
讚讚的推薦文章。
08/17 05:19, 5F

08/17 09:13, , 6F
推!
08/17 09:13, 6F
文章代碼(AID): #1ParHjwR (Linux)
討論串 (同標題文章)
文章代碼(AID): #1ParHjwR (Linux)