更改文件扩展名
在一个文件夹中,我有一个.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.run
到test.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
的末尾删除字符串。