當檔名開頭中有 "-" 時, 該怎麼 rename/mv ?

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

當檔名開頭中有 "-" 時, 該怎麼 rename/mv ?

文章wsun013 » 週五 6月 30, 2006 6:59 pm

Hi,

小弟有一批檔案
-abc001.jpg
-abc002.jpg
-abc003.jpg
......
-abc438.jpg
想要 rename 成
pic001.jpg 至 pic438.jpg

但是用 rename 或是 mv 他總是會把 "-" 當成 option 而不是檔名
eg.

$mv -abc001.jpg pic001.jpg
mv: invalid option -- a

加上 / 或是 "" 起來也沒辦法...
故求教於此
先謝啦
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GE d->++ s: a-- C+++>++++ UL>++++ P>++++ L++>++++ E---- W+ N@ o K- w++(+)
O- M- V? PS+++(+) PE++(+) Y-- PGP- t>--- 5? X+++ R- tv-(--) b+ DI? D+ G e++>++++
h+(!) r++(%) y*>++++
-------END GEEK CODE BLOCK-------
頭像
wsun013
快樂的大學生
快樂的大學生
 
文章: 784
註冊時間: 週二 9月 14, 2004 12:12 pm
來自: 紐西蘭

文章Tetralet » 週五 6月 30, 2006 7:13 pm

請試著加上 -- 參數,例:
代碼: 選擇全部
mv -- -abc001.jpg pic001.jpg
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

文章wsun013 » 週五 6月 30, 2006 7:37 pm

感謝 Tetralet 兄, 成功了

那再貪心的問.....如果是 [ 在 rename 呢? :ooops:
eg.
[folder1]
[folder2]

要 rename 成
folder1
folder2

$rename -- 's\/[\\' *
Unmatched [ in regex; marked by <-- HERE in m//[ <-- HERE / at (eval 1) line 1.

rename -- 's\"/"[\\' *
Unmatched [ in regex; marked by <-- HERE in m//[ <-- HERE / at (eval 1) line 1.

看來我真是學藝不精 orz
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GE d->++ s: a-- C+++>++++ UL>++++ P>++++ L++>++++ E---- W+ N@ o K- w++(+)
O- M- V? PS+++(+) PE++(+) Y-- PGP- t>--- 5? X+++ R- tv-(--) b+ DI? D+ G e++>++++
h+(!) r++(%) y*>++++
-------END GEEK CODE BLOCK-------
頭像
wsun013
快樂的大學生
快樂的大學生
 
文章: 784
註冊時間: 週二 9月 14, 2004 12:12 pm
來自: 紐西蘭

文章Tetralet » 週五 6月 30, 2006 8:06 pm

您可以試試:
代碼: 選擇全部
rename 's/[]\[]//g' *

例:
代碼: 選擇全部
$ ls
[folder1]  [folder2]

$ rename 's/[]\[]//g' *

$ ls
folder1  folder2

話說,我第一次知道 rename 這個指令呢!
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

文章wsun013 » 週五 6月 30, 2006 8:21 pm

:finger1:

要找機會看看 Perl 了
完全不知道
代碼: 選擇全部
s/[]\[]//g
在幹麻
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GE d->++ s: a-- C+++>++++ UL>++++ P>++++ L++>++++ E---- W+ N@ o K- w++(+)
O- M- V? PS+++(+) PE++(+) Y-- PGP- t>--- 5? X+++ R- tv-(--) b+ DI? D+ G e++>++++
h+(!) r++(%) y*>++++
-------END GEEK CODE BLOCK-------
頭像
wsun013
快樂的大學生
快樂的大學生
 
文章: 784
註冊時間: 週二 9月 14, 2004 12:12 pm
來自: 紐西蘭

文章Tetralet » 週五 6月 30, 2006 9:07 pm

剛才敝人所貼出來的只是單純得把 [ ] 這兩個符號去掉,
似乎還不夠完善。
最好的作法是找出以 [ 開頭、以 ] 結尾的檔案並把開頭的 [ 和結尾的 ] 給去掉。

敝人想出的指令如下:
代碼: 選擇全部
$ ls
[a[b]c]  [folder1]  [folder2]

$ rename 's/^\[(.*)]$/$1/g' *

$ ls
a[b]c  folder1  folder2


解釋 s/^\[(.*)]$/$1/g 指令:

s///g → 進行取代。這個不用解釋吧?
^\[ → 以 [ 開頭
(.*) → 包在 [] 中的字串。存起來等一下用。
]$ → 以 ] 結尾,] 不必用 \ 這個跳脫字元。
$1 → 將剛才存起來的字串取出。

其實您可以使用以下指令:
代碼: 選擇全部
ls -1 | perl -pe 's/^\[(.*)]$/$1/g'

來先行預覽更名後的結果。

若有問題,歡迎您提出來討論。
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

文章wsun013 » 週六 7月 01, 2006 4:10 pm

感謝 Tetralet 兄, 又學到新東西了
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GE d->++ s: a-- C+++>++++ UL>++++ P>++++ L++>++++ E---- W+ N@ o K- w++(+)
O- M- V? PS+++(+) PE++(+) Y-- PGP- t>--- 5? X+++ R- tv-(--) b+ DI? D+ G e++>++++
h+(!) r++(%) y*>++++
-------END GEEK CODE BLOCK-------
頭像
wsun013
快樂的大學生
快樂的大學生
 
文章: 784
註冊時間: 週二 9月 14, 2004 12:12 pm
來自: 紐西蘭


回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:Google [Bot] 和 1 位訪客