![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - [難題]跑shell script批量更動文件的部分檔名有問題
(https://www.pcdvd.com.tw/showthread.php?t=985404)
|
|---|
[難題]跑shell script批量更動文件的部分檔名有問題
http://serverfault.com/questions/22...rd-in-file-name
這個老外的例子很好,也正是我要的 但是我的原始檔名/後改字串等等是取自shell script中的其他的變數(ex $name) 而且該變數中會有很多的unicode以及特殊字符 (ex [♫2011♫]) 目前設想最簡單的方式就是用rename.ul變數去更名 但是用了很多方法跑完script都不起效果任何效果, 我有用echo去double check我下的指令應該沒錯 我也不知道這樣debug正不正規但同樣的狀況我直接用putty下command line卻沒問題 有點懷疑是不是rename.ul不能在shell script下拿來用~.~ 代碼:
echo "rename.ul '$name' '$newname' /home/fy6877/test/final/*" 希望達人能給一條明路讓我能夠完整利用'$name' '$newname'這兩個全域變數來做更動檔名的動作 下面是我曾經用過的組合,都是用script去跑沒作用 :nonono: 代碼:
rename.ul '$name' '$newname' /home/fy6877/test/final/* ls /home/fy6877/test/final/|xargs -I$ rename.ul '$name' '$newname' $ BTW,我的目標都只修改檔名中的部分字串不是更動含副檔名的完整檔名 for example 代碼:
[EAC]00XX♫.rar.001-------->A.001 ($name=[EAC]00XX♫.rar;$newname=A) |
拿去試試看
建立一個rename.sh內容如下 #!/bin/bash for f in $(ls $1); do if [[ $f = $name* ]]; then mv $name${f/$name} $newname${f/$name} fi done 然後執行rename.sh [directory] |
引用:
yctsai88兄,我看不太懂 :laugh: directory要指向哪邊 :laugh: 我兩個變數都是取自於txt文件裡面的某一行 而且他們也不是真正的檔名,只是檔名的某一部分 yctsai88兄能不能幫忙簡單註解一下每行的目的在做什麼讓我參考一下 另外{f/$name}語法是做什麼的我也不懂:p |
你要的是類似下列這樣的更改檔名嗎?
原檔名 abcdefg-110.rar 新檔名 bcdfhhr-110.rar 如果是這樣你可以用rename裡面的範例來更改。 |
看不太懂你遇到什麼問題,
我也懶得點你給的url了 但我猜你遇到文字有空白或unicode 特別字元 當你用到*時,例如 "ls /path/*"就會遇到 請去google "IFS space" 另外請愛用find -print0 | xargs -0 來做 (細節自行去查) |
引用:
不行的,因為我的來源是來自兩個全域變數 而且裡面含有unicode rename唯一可用的方法法是利用 rename.ul $name $newname location去寫進shell script用 這個方法碰到unicode自動失效:D rename不吃雙引號,所以不像mv.7z等軟體好用 如果沒理解錯rename肯定是不能用的了 另外老外有回應 http://serverfault.com/questions/43...g-from-the-shel 算不上是提供解決方法,但是給的方向倒很明暸:think: |
| 所有的時間均為GMT +8。 現在的時間是01:02 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。