![]() |
||
|
Amateur Member
![]() 加入日期: Dec 2008
文章: 37
|
[難題]跑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去跑沒作用 代碼:
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) 此文章於 2012-09-29 09:55 PM 被 fy6877 編輯. |
|||||||
|
|
|
Major Member
![]() 加入日期: Apr 2002
文章: 105
|
拿去試試看
建立一個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] |
||
|
|
|
Amateur Member
![]() 加入日期: Dec 2008
文章: 37
|
引用:
yctsai88兄,我看不太懂 ![]() directory要指向哪邊 我兩個變數都是取自於txt文件裡面的某一行 而且他們也不是真正的檔名,只是檔名的某一部分 yctsai88兄能不能幫忙簡單註解一下每行的目的在做什麼讓我參考一下 另外{f/$name}語法是做什麼的我也不懂 ![]() |
|
|
|
|
Amateur Member
![]() 加入日期: Jul 2001
文章: 40
|
你要的是類似下列這樣的更改檔名嗎?
原檔名 abcdefg-110.rar 新檔名 bcdfhhr-110.rar 如果是這樣你可以用rename裡面的範例來更改。 |
|
|
|
New Member
加入日期: Jan 2002
文章: 1
|
看不太懂你遇到什麼問題,
我也懶得點你給的url了 但我猜你遇到文字有空白或unicode 特別字元 當你用到*時,例如 "ls /path/*"就會遇到 請去google "IFS space" 另外請愛用find -print0 | xargs -0 來做 (細節自行去查) |
|
|
|
Amateur Member
![]() 加入日期: Dec 2008
文章: 37
|
引用:
不行的,因為我的來源是來自兩個全域變數 而且裡面含有unicode rename唯一可用的方法法是利用 rename.ul $name $newname location去寫進shell script用 這個方法碰到unicode自動失效 rename不吃雙引號,所以不像mv.7z等軟體好用 如果沒理解錯rename肯定是不能用的了 另外老外有回應 http://serverfault.com/questions/43...g-from-the-shel 算不上是提供解決方法,但是給的方向倒很明暸 ![]() 此文章於 2012-09-30 09:12 PM 被 fy6877 編輯. |
|
|
|