2014-02-16 33 views
2

我一直在嘗試使用util-linux版本的重命名(2011)來替換所有文件中的特定字符串與另一個。雖然我意識到perl版本的重命名將提供解決方案,但我無法弄清楚如何使用此版本的重命名。使用util-linux重命名命令

具體的例子是一組文件(東西 - 2013.mkv,somethingelse - 2011.mkv),我試圖刪除雙破折號並用空格替換。

+1

你嘗試這樣'重命名的/ -/\ \ /'* .mp4' – neeru

+2

重命名'///'是perl版本的語法,而不是util-linux版本。如果我使用的是perl版本,那麼你的命令可以在.mp4文件上運行:) – user3179658

+0

'--'表示使用'getopt'(例如'rename')的程序的「選項結束」。解決方案最有可能找到解決辦法。也許你可以先把'-'換成別的東西(例如'_'),然後替換它? – jackrabbit

回答

3

的問題是,rename使用getopt的參數解析,因而具有雙破折號(--)的特殊解釋。 --表示參數的結束。

解決方案是避免在您的命令中使用--。一種方法是將您的命令分解爲子目標,例如翻譯單破折號強調,然後兩個下劃線單破折號:

$ rename - _ *.mkv 
$ rename __ - *.mkv 

一個不太迂迴的方式做,這是實際使用getopt行爲

$ rename -- -- - *.mkv 
0
mkdir TEMP 
numbers=2011 
find . -name "*.mkv" | while read filename 
do 
    echo mv "$filename" "TEMP/somethingelse_"$((numbers++)).mkv 
    rm filename 
done 
+0

這個腳本不使用util-linux版本的重命名。 – user3179658