使用util-linux重命名命令

我一直在尝试使用util-linux版本的rename(2011)来replace所有文件中的特定string。 虽然我意识到perl版本的重命名将提供一个解决scheme,我不知道如何使用这个版本的重命名。

具体的例子是一组文件(东西 – 2013.mkv,somethingelse – 2011.mkv),我试图删除双破折号,并用空格replace。

问题是rename使用getopt进行参数解析,因此对双破折号( -- )有特殊的解释。 --表示参数的结束。

解决办法是避免使用--在你的命令。 一种方法是将你的命令分解为子目标,例如将单个短划线转换为下划线,然后将两个下划线转换为单个短划线:

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

一个不太迂回的做法是实际使用getopt行为

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