通过使用shell脚本replace文件名中的特定模式重命名多个文件

写一个简单的脚本,将自动重命名一些文件。 作为一个例子,我们希望文件* 001.jpg重命名为用户定义的string+ 001.jpg(例如:MyVacation20110725_001.jpg)这个脚本的用法是让数码相机的照片具有一定的文件名。

我需要为此编写一个shell脚本。 有人可以build议如何开始?

一个例子来帮助你起步。

for f in *.jpg; do mv "$f" "`echo $f | sed s/IMG/VACATION/`"; done 

在这个例子中,我假设你所有的图像文件都以“IMG”开头,而你想用“VACATION”replace“IMG”。

shell自动评估*.jpg到所有匹配的文件。

mv (文件的新名称)的第二个参数是将“IMG”replace为“VACATION”的sed命令的输出。

您可以使用重命名实用程序通过模式重命名多个文件。 例如,下面的命令会将stringMyVacation2011_预先添加到所有带有jpg扩展名的文件中。

 rename 's/^/MyVacation2011_/g' *.jpg 

要么

 rename <pattern> <replacement> <file-list> 
 for file in *.jpg ; do mv $file ${file//IMG/myVacation} ; done 

再次假设您的所有图像文件都有string“IMG”,并且您想用“myVacation”replace“IMG”。

用bash你可以直接用参数扩展来转换string。

例如:如果文件是IMG_327.jpg,那么将执行mv命令,就像执行mv IMG_327.jpg myVacation_327.jpg 。 这将为匹配*.jpg目录中的每个文件完成。

IMG_001.jpg – > myVacation_001.jpg
IMG_002.jpg – > myVacation_002.jpg
IMG_1023.jpg – > myVacation_1023.jpg
诸如此类……

你可以试试这个:

 for file in *.jpg; do mv $file $somestring_${file:((-7))} done 

你可以在man bash看到“parameter expansion”来更好地理解上面的内容。

这个例子,我假设你所有的图像文件以“IMG”开头,你想用“VACATION”replace“IMG”

解决scheme:首先确定所有的jpg文件,然后replace关键字

 find . -name '*jpg' -exec bash -c 'echo mv $0 ${0/IMG/VACATION}' {} \; 

无法评论Susam Pal的回答,但如果你处理空间,我会用引号括起来:

 for f in *.jpg; do mv "$f" "`echo $f | sed s/\ /\-/g`"; done; 

另一个select是:

 for i in *001.jpg do echo "mv $i yourstring${i#*001.jpg}" done 

删除echo后,你有它的权利。

#代替参数将只保留最后一部分,所以你可以改变它的名字。

 find . -type f | sed -n "s/\(.*\)factory\.py$/& \1service\.py/p" | xargs -p -n 2 mv 

例如将重命名以“factory.py”结尾的名称中的所有文件,以“service.py”结尾的名称replace

说明:

1)在sed cmd中,-n标志将抑制应用s ///命令后输出的回显input的正常行为,并且s ///上的p选项将强制写入输出(如果进行replace)。 由于sub只会匹配,所以sed只会输出以“factory.py”结尾的文件

2)在s ///replacestring中,我们使用“&”将整个匹配string,后跟一个空格字符插入到replacestring中。 因此,我们的RE匹配整个文件名至关重要。 在空格字符之后,我们使用“\ 1service.py”插入我们在“factory.py”之前咀嚼的string,接着是“service.py”,replace它。 所以对于更复杂的转换你必须改变参数s ///(re仍然匹配整个文件名)

示例输出:

 foo_factory.py foo_service.py bar_factory.py bar_service.py 

3)我们使用xargs和-n 2一次消耗sed 2分隔string的输出,把它们传递给mv(我也把-p选项放在那里,这样你可以在运行时感到安全)。 瞧。