我有一些文件,这些文件在“1.1' 结尾,例如:如何在Linux/Unix中将多个文件从一个扩展名重命名为另一个扩展名?
example.file.ex1.1
example.file.ex2.1
example.file.ex3.1
有没有一种方法,我可以快速重命名他们都没有在最后的” 1.1' (如例子.file.ex1,example.file.ex2等)?
谢谢!
我有一些文件,这些文件在“1.1' 结尾,例如:如何在Linux/Unix中将多个文件从一个扩展名重命名为另一个扩展名?
example.file.ex1.1
example.file.ex2.1
example.file.ex3.1
有没有一种方法,我可以快速重命名他们都没有在最后的” 1.1' (如例子.file.ex1,example.file.ex2等)?
谢谢!
纯bash的解决方案:
for curFile in example.file.*.1; do
mv -- "$curFile" "${curFile:0:-2}"
done
是的,试试这个与rename:
rename -n 's/\.1$//' *
删除-n
(干式运行模式切换),如果你的测试是有效的。
warning http://pix.toile-libre.org/upload/original/1377510865.png还有其他的工具,这可能会或可能无法做到这一点,所以要小心相同的名称。
如果您运行以下命令(linux
)
$ file $(readlink -f $(type -p rename))
和你有一个像
.../rename: Perl script, ASCII text executable
那么这似乎是正确的工具=结果)
如果没有,要做到这一点在Debian
默认(通常已经是这样了)和微分像Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
最后但并非最不重要的,该工具最初是由Larry Wall,Perl的的爸爸写的。
你能否解释为什么默认的''rename''在Ubuntu或Debian上不起作用?似乎运行''/ usr/bin/rename -n's/.1 //'*''正在为我工作,而默认重命名不会。我只是不明白它,都允许perl表达式,但一个作品,另一个不。有什么不同? –
默认重命名应该适用于Ubuntu/Debian –
是啊!你是对的。我的坏 –
另一个bash解决方案使用parameter expansion:
for curFile in example.file.*.1; do
mv "$curFile" "${curFile%.1}"
done
谢谢!它的工作原理: f = file.zip; echo $ {f%.zip}# - > file –
这个问题似乎是题外话,因为它更适合[UNIX和Linux(http://unix.stackexchange.com/) –
所有伟大的答案。谢谢! – user2716340
尝试,但显然我没有足够的“声誉”。 =) – user2716340