如何使用正则表达式重命名linux shell中的文件?

时间:2012-08-07 17:18:55

标签: linux shell batch-processing file-rename batch-rename

我有一些文件:

/var/www/media/0001/0001_123456_12.jpg
/var/www/media/0002/0002_123456_12.jpg
/var/www/media/0003/0003_123456_12.jpg

我想将它们重命名为:

/var/www/media/0001/0001_test.jpg
/var/www/media/0002/0002_test.jpg
/var/www/media/0003/0003_test.jpg

我的想法是找到第一个_,删除文件的其余部分,直到.然后添加test

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

这是一个允许你使用正则表达式的solution in perl

答案 1 :(得分:1)

find /var/www/media/ -name \*.jpg -exec sh -c '
  a=$(echo {} | sed s/_123456_/_/);
  [ "$a" != "{}" ] && mv "{}" "$a" '

您可以在/var/www/media中找到所有jpg文件,并为每个文件运行命令:

a=$(echo {} | sed s/_123456_/_/)
[ "$a" != "{}" ] && mv "{}" "$a"

在此命令之后,a变量重写了文件内的名称:

a=$(echo {} | sed s/_123456_/_/)

我们比较a变量和真实姓名({}),它们不相等 必须重命名该文件。

答案 2 :(得分:1)

如果您可以安装mmv软件包,那么这些操作就变得简单了。使用mmv,您可以执行以下操作:

cd /var/www/media
mmv '*/*_123456_*.jpg' '#1/#2_test.jpg'

以下是mmv联机帮助页:http://manpages.ubuntu.com/manpages/lucid/man1/mln.1.html