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

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

我需要为此写一个shell脚本。谁能建议一下怎么开始?

227149 次浏览

一个帮助你起步的例子。

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

在这个例子中,我假设你所有的图像文件都包含字符串IMG,你想用VACATION替换IMG

shell自动将*.jpg求值为所有匹配的文件。

mv的第二个参数(文件的新名称)是sed命令的输出,该命令将IMG替换为VACATION

如果您的文件名包含空格,请仔细注意"$f"符号。您需要使用双引号来保留空白。

你可以试试这个:

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

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

不能评论Susam Pal的回答,但如果你在处理空格,我会用引号括起来:

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

再次假设你所有的图像文件都有字符串“IMG”,你想用“myVacation”替换“IMG”。

使用bash,你可以直接用参数扩展转换字符串。

例如:如果文件是IMG_327.jpg, mv命令将被执行,就像执行mv IMG_327.jpg myVacation_327.jpg一样。这将对在匹配*.jpg的目录中找到的每个文件执行。

IMG_001.jpg -> myVacation_001.jpg
.jpg IMG_002.jpg -> myVacation_002.jpg
.jpg myVacation_1023.jpg
.jpg 等等…< / p >

可以使用重命名实用程序按模式重命名多个文件。例如,下面的命令将字符串MyVacation2011_前置到所有扩展名为jpg的文件中。

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

rename <pattern> <replacement> <file-list>

另一种选择是:

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

Eg将重命名CWD中的所有文件,名称以“factory.py”结尾;以“service.py”结尾的名称代替;

解释:

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

  2. 在s///替换字符串中,我们使用"& "将整个匹配字符串(后跟空格字符)插入到替换中。因此,RE匹配整个文件名是至关重要的。在空格字符之后,我们使用"\1service.py"为了插入字符串,我们在"factory.py"之前插入"service.py",然后替换它。所以对于更复杂的转换,你必须将args更改为s/// (re仍然匹配整个文件名)

示例输出:

foo_factory.py foo_service.py
bar_factory.py bar_service.py
  1. 我们使用xargs-n 2一次性使用sed 2分隔字符串的输出,并将它们传递给mv(我还在那里设置了-p选项,以便您在运行时感到安全)。瞧。

注意:如果您面临更复杂的文件和文件夹场景,请使用这篇文章更详细地解释了find(和一些替代方案). exe。

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

解决办法:先识别所有JPG文件,然后替换关键字

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