使用正则表达式获取文件名的一部分

时间:2015-04-01 16:38:38

标签: macos unix command rename mv

在Mac(OS X)上,我有一个包含许多图像的目录:

IMG_250x333_1.jpg
IMG_250x333_2.jpg
IMG_250x333_3.jpg
...

我需要将所有这些重命名为:

IMG_1.jpg
IMG_2.jpg
IMG_3.jpg
...

我认为使用带有“mv”的UNIX命令行和一种正则表达式可以完成这项工作,但我不知道怎么做!有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果有IMG_111x333_1.jpg以及IMG_444x222_1.jpg会怎样?你冒着破坏/覆盖的风险......

但如果这就是你想要的,你可以这样做:

#!/bin/bash
for f in *.jpg; do
   new=${f/_*_/_}
   echo mv "$f" $new
done

如果您喜欢它正在做的事情,请删除echo一词。

答案 1 :(得分:0)

这是我喜欢的方法:

ls | sed 's/\(.*\)250x333_\(.*\)/mv "&" "\1\2"/' | sh
  • 使用ls列出文件。
  • 然后,使用sed转换文件名,并生成mv命令。请注意,&命令中的sed输出完整的输入字符串。
  • 最后,使用mv
  • 评估sh命令

这种方法的好处是你可以删除| sh并测试你的正则表达式是否正确。