2012-03-26 84 views
11

我一直在寻找一个Linux命令行来重命名一堆文件。一个班轮重命名一堆文件

pattern1.a pattern1.b pattern1.c ... 

一旦执行该命令,我应该得到

pattern2.a pattern2.b pattern2.c ... 
+0

[重命名Unix中的多个文件]可能的重复(http://stackoverflow.com/questions/1086502/rename-multiple-files-in-unix) – 2012-03-28 18:45:41

回答

12
for i in pattern1.*; do mv -- "$i" "${i/pattern1/pattern2}"; done 

在你运行它,在mv面前坚持一个echo,看看它做。

1

有很多方法来剥皮这只猫。第一

find . -print | sed -ne '/^\.\/pattern1\(\..*\)/s//mv "&" "pattern2\1"/p' 

由于Kerrek与他的回答表明,这一个:如果你喜欢你的模式是一个正则表达式,而不是一个fileglob,你想要做的改变递归你可以使用这样的事情告诉你它会做什么。一旦您熟悉这些命令,就可以通过外壳管理输出(即,将| sh添加到最后)。

这个工作对我来说:

[[email protected] ~]$ ls -l foo.* 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 foo.php 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 foo.txt 
[[email protected] ~]$ find . -print | sed -ne '/^\.\/foo\(\..*\)/s//mv "&" "bar\1"/p' 
mv "./foo.txt" "bar.txt" 
mv "./foo.php" "bar.php" 
[[email protected] ~]$ find . -print | sed -ne '/^\.\/foo\(\..*\)/s//mv "&" "bar\1"/p' | sh 
[[email protected] ~]$ ls -l foo.* bar.* 
ls: foo.*: No such file or directory 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 bar.php 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 bar.txt 
[[email protected] ~]$ 
+0

我们需要那里的“皮肤猫”隐喻吗? :D – 2017-07-19 10:56:48

11

如果你碰巧使用Linux,你也可以有一个perl脚本是/ usr/bin中/重命名基于更复杂的模式比外壳通配其甘蔗重命名文件许可证。

我的系统中的/ usr/bin/rename已记录在here中。它可以这样来使用:

rename "s/pattern1/pattern2/" pattern1.* 

似乎许多other Linux environments有可能像这样使用不同rename

rename pattern1 pattern2 pattern1.* 

检查man rename系统的详细信息。

+1

第二个重命名示例的竖起大拇指;在网上搜索并找不到问题为什么''s/pattern1/pattern2 /“'不起作用! – 2014-11-06 13:16:15