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

看板Linux作者 (Vett)時間8年前 (2017/08/15 16:37), 編輯推噓4(4015)
留言19則, 8人參與, 最新討論串2/6 (看更多)
※ 引述《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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.0.52.126 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1502786258.A.566.html

08/15 16:40, , 1F
真是好心人…
08/15 16:40, 1F

08/15 16:51, , 2F
然後就會出事情了... $i 沒有用雙引號包起來
08/15 16:51, 2F

08/15 16:55, , 3F
你其實想陷害他對吧
08/15 16:55, 3F

08/15 17:10, , 4F
mv "$i" "OnePiecev$NUM.mp4" 才對
08/15 17:10, 4F

08/15 17:28, , 5F
順手打的 打錯了不好意思啊 哈哈
08/15 17:28, 5F

08/15 22:24, , 6F
對不起!小弟Linux新手,望各位高手海涵! ^^"
08/15 22:24, 6F

08/15 23:47, , 7F
感覺用""包起來還是很不保險, 比如要是檔名有";然後
08/15 23:47, 7F

08/15 23:48, , 8F
`ls` 這邊也可能會炸; NUM 也可能會炸
08/15 23:48, 8F

08/15 23:48, , 9F
太多需要 escape 的字元了
08/15 23:48, 9F

08/16 00:30, , 10F
謝謝各位前輩的教導,在下會繼續努力的! 謝謝! ^^
08/16 00:30, 10F

08/16 01:19, , 11F
最近在處理一個資料夾下有約一百四十萬個圖檔的分類
08/16 01:19, 11F

08/16 01:20, , 12F
一開始因為在windows下,所以選用了Photos2Folders
08/16 01:20, 12F

08/16 01:20, , 13F
跑了四天之後,遇到Win10愛的更新,程式被中斷了,
08/16 01:20, 13F

08/16 01:22, , 14F
目前在用cygwin摻msys2然後先用find或ls -U之後,把
08/16 01:22, 14F

08/16 01:22, , 15F
檔名透過管線餵給xargs或while read之類的處理。
08/16 01:22, 15F

08/16 09:21, , 16F
變數代換後,不會偵測特殊字元,除了空格的分詞。
08/16 09:21, 16F

08/16 09:22, , 17F
例如 to_null='>/dev/null' ; ls $to_null
08/16 09:22, 17F

08/16 09:24, , 18F
會變成列出名為 '>/dev/null' 的檔案,而非重導向。
08/16 09:24, 18F

08/16 21:06, , 19F
$i要用雙引號=> ${i}
08/16 21:06, 19F
文章代碼(AID): #1PahBILc (Linux)
討論串 (同標題文章)
文章代碼(AID): #1PahBILc (Linux)