更改文件扩展名

在一个文件夹中,我有一个.run文件,我正在尝试将扩展名更改为.clu。 问题是我试过了

rename 's/.run$/.clu/' *.run 

但这对文件完全没有任何意义。

注意:我不是要尝试转换文件,只是为了重命名扩展名。

我不知道你的问题是什么。 您发布的内容有效:

 $ mkdir test $ touch test/test{01..10}.run $ rename 's/\.run$/.clu/' test/*.run -vn test/test01.run renamed as test/test01.clu test/test02.run renamed as test/test02.clu test/test03.run renamed as test/test03.clu test/test04.run renamed as test/test04.clu test/test05.run renamed as test/test05.clu test/test06.run renamed as test/test06.clu test/test07.run renamed as test/test07.clu test/test08.run renamed as test/test08.clu test/test09.run renamed as test/test09.clu test/test10.run renamed as test/test10.clu 

-vn只是告诉我们如果没有它会运行它会做什么。

我正在逃避点(否则它是一个REGEX“任何东西”),但它确实没有区别。 它没有它也可以。


您是否有可能实际运行rename.ul ? 检查以确保您使用的是Perl重命名(使用我们正在使用的语法)和dpkg -S $(readlink -f $(which rename))

  • perl: /usr/bin/prename很好。
  • util-linux: /usr/bin/rename.ul很糟糕。 出于某种原因,您使用的是非常有限的重命名版本。 发生了一件非常奇怪的事情。

目前,看看prename存在(你现在可以使用它),如果没有,开始问为什么没有正确安装Perl。 它会建议你没有安装Ubuntu。

或者,如果您对使用rename.ul感到满意,则以下内容应该有效:

 rename.ul .run .clu *.run 

但是这可能test.run.hooray.run test.clu.hooray.clu这样的文件test.run.hooray.runtest.clu.hooray.clu ,这显然不是很好。

你只需使用mv

 mv oldname newname 

mv用于移动/重命名文件。 有关更多信息,请参阅mv的手册页。

我喜欢这样的情况是mmv (它在Ubuntu中没有默认安装,但你可以使用sudo apt-get install mmv命令安装它):

 mmv -n '*.run' '#1.clu' 

-n表示它是一个测试运行,实际上不会更改任何文件。 它将显示一个文件列表,如果删除了-n ,将重命名这些文件。 在上面的例子中,它会将当前目录中的所有文件从.run的文件扩展名转换为.clu

 mmv -v '*.run' '#1.clu' 

-v是可选的,但是包含它是个好主意,因为它是您将对重命名命令所做的更改的唯一记录。

有关详细信息,请参阅man mmv

不需要为此rename 。 你可以使用basename来做到这一点:

 for f in *run; do mv "$f" "$(basename "$f" .run)".clu; done 

basename将打印文件的名称(无路径),并删除可选的后缀。 因此, "$(basename "$f" .run)".clu是文件$f的名称, .run扩展名替换为clu

您也可以使用bash自己的字符串操作function :

 for f in *run; do echo mv "$f" "${f%%.run}".clu; done 

构造${var%%string}从变量$var的末尾删除字符串。