PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

回應
 
主題工具
fy6877
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 編輯.
舊 2012-09-29, 09:45 PM #1
回應時引用此文章
fy6877離線中  
yctsai88
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]
 
舊 2012-09-30, 12:20 AM #2
回應時引用此文章
yctsai88離線中  
fy6877
Amateur Member
 

加入日期: Dec 2008
文章: 37
引用:
作者yctsai88
拿去試試看

建立一個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兄,我看不太懂
directory要指向哪邊
我兩個變數都是取自於txt文件裡面的某一行
而且他們也不是真正的檔名,只是檔名的某一部分

yctsai88兄能不能幫忙簡單註解一下每行的目的在做什麼讓我參考一下
另外{f/$name}語法是做什麼的我也不懂
舊 2012-09-30, 04:22 AM #3
回應時引用此文章
fy6877離線中  
sirocawa
Amateur Member
 

加入日期: Jul 2001
文章: 40
你要的是類似下列這樣的更改檔名嗎?

原檔名 abcdefg-110.rar

新檔名 bcdfhhr-110.rar

如果是這樣你可以用rename裡面的範例來更改。
舊 2012-09-30, 11:25 AM #4
回應時引用此文章
sirocawa離線中  
cmtsij
New Member
 

加入日期: Jan 2002
文章: 1
看不太懂你遇到什麼問題,
我也懶得點你給的url了

但我猜你遇到文字有空白或unicode 特別字元
當你用到*時,例如 "ls /path/*"就會遇到
請去google "IFS space"
另外請愛用find -print0 | xargs -0 來做 (細節自行去查)
舊 2012-09-30, 04:06 PM #5
回應時引用此文章
cmtsij離線中  
fy6877
Amateur Member
 

加入日期: Dec 2008
文章: 37
引用:
作者sirocawa
你要的是類似下列這樣的更改檔名嗎?

原檔名 abcdefg-110.rar

新檔名 bcdfhhr-110.rar

如果是這樣你可以用rename裡面的範例來更改。


不行的,因為我的來源是來自兩個全域變數
而且裡面含有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 編輯.
舊 2012-09-30, 09:09 PM #6
回應時引用此文章
fy6877離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是01:50 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。