PCDVD數位科技討論區

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)

fy6877 2012-09-29 09:45 PM

[難題]跑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)

yctsai88 2012-09-30 12:20 AM

拿去試試看

建立一個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]

fy6877 2012-09-30 04:22 AM

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

yctsai88兄能不能幫忙簡單註解一下每行的目的在做什麼讓我參考一下
另外{f/$name}語法是做什麼的我也不懂:p

sirocawa 2012-09-30 11:25 AM

你要的是類似下列這樣的更改檔名嗎?

原檔名 abcdefg-110.rar

新檔名 bcdfhhr-110.rar

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

cmtsij 2012-09-30 04:06 PM

看不太懂你遇到什麼問題,
我也懶得點你給的url了

但我猜你遇到文字有空白或unicode 特別字元
當你用到*時,例如 "ls /path/*"就會遇到
請去google "IFS space"
另外請愛用find -print0 | xargs -0 來做 (細節自行去查)

fy6877 2012-09-30 09:09 PM

引用:
作者sirocawa
你要的是類似下列這樣的更改檔名嗎?

原檔名 abcdefg-110.rar

新檔名 bcdfhhr-110.rar

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


不行的,因為我的來源是來自兩個全域變數
而且裡面含有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。