2013-08-25 79 views
8

我有一些文件,这些文件在“1.1' 结尾,例如:如何在Linux/Unix中将多个文件从一个扩展名重命名为另一个扩展名?

example.file.ex1.1 
example.file.ex2.1 
example.file.ex3.1 

有没有一种方法,我可以快速重命名他们都没有在最后的” 1.1' (如例子.file.ex1,example.file.ex2等)?

谢谢!

+3

这个问题似乎是题外话,因为它更适合[UNIX和Linux(http://unix.stackexchange.com/) –

+0

所有伟大的答案。谢谢! – user2716340

+2

尝试,但显然我没有足够的“声誉”。 =) – user2716340

回答

5

纯bash的解决方案:

for curFile in example.file.*.1; do 
    mv -- "$curFile" "${curFile:0:-2}" 
done 
12

是的,试试这个与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的的爸爸写的。

+0

你能否解释为什么默认的''rename''在Ubuntu或Debian上不起作用?似乎运行''/ usr/bin/rename -n's/.1 //'*''正在为我工​​作,而默认重命名不会。我只是不明白它,都允许perl表达式,但一个作品,另一个不。有什么不同? –

+0

默认重命名应该适用于Ubuntu/Debian –

+0

是啊!你是对的。我的坏 –

3

另一个解决方案使用parameter expansion

for curFile in example.file.*.1; do 
    mv "$curFile" "${curFile%.1}" 
done 
+0

谢谢!它的工作原理: f = file.zip; echo $ {f%.zip}# - > file –

相关问题