2012-04-07 59 views

回答

4

如果您使用a Perl-based rename(如您的標籤所示),則w不是Perl正則表達式操作。

rename -f 's/_/-/g' *_*.mat 
+0

謝謝,@Daxim。我仍然使用駱駝書第一版的Perl'rename'的輕度更新版本。 – 2012-04-07 19:02:05

+0

這項工作!感謝@Leffler。起初我嘗試過's',但後來改成'w'。但是我不知道我必須在最終的 – escorciav 2012-04-18 04:23:23

+0

@escorciav:AFAIK處使用g,'w'不是Perl替換運算符。最後的'g'確保所有的下劃線都被連字符替代。如果你只想映射第一個下劃線,那麼你不需要'g'。我想有一個機會,腳本會自動應用'g'。 – 2012-04-18 07:15:29

2

我不明白你是否使用shell重命名或Perl重命名:我不明白你的命令在任何上下文中。

一個Perl的命令行腳本在當前目錄重命名所有*.mat文件看起來像這樣

perl -e 'do { (my $f = $_) =~ tr/_/-/; rename $_, $f } for glob "@ARGV"' *.mat 
+1

用'@ ARGV'替換'glob「@ARGV」'。你正在通過一些已經被圈起來的東西。這將無論什麼都不做,或者根據文件名稱給出錯誤的結果。具體來說,如果任何'mat'文件的名字中有空格,你的模式將失敗。 [固定] – ikegami 2012-04-07 20:51:26