1

我有一些文件:

/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.

有任何想法吗?

4

3 回答 3

1

这是perl中的一个解决方案,它允许您使用正则表达式。

于 2012-08-07T17:22:09.883 回答
1
find /var/www/media/ -name \*.jpg -exec sh -c '
  a=$(echo {} | sed s/_123456_/_/);
  [ "$a" != "{}" ] && mv "{}" "$a" '

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

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

在这个命令之后,a变量已经改写了里面的文件名:

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

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

于 2012-08-07T17:24:55.800 回答
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

于 2012-08-07T17:37:28.287 回答