使用regexp批量重命名mac os x bash中的文件

时间:2015-08-21 14:38:14

标签: regex macos bash

我有一个特定的文件集案例:

80e505bf3611cabea7de90e2ba-movies-c7185328dd51ef480b7d8c71873fbabf-ultra-low_000005_10-23.mov
80e505bf3611cabea7de90e2ba-movies-c7185328dd51ef480b7d8c71873fbabf-ultra-low_000006_9-87.mov
80e505bf3611cabea7de90e2ba-movies-c7185328dd51ef480b7d8c71873fbabf-ultra-low_000007_10-18.mov
80e505bf3611cabea7de90e2ba-movies-c7185328dd51ef480b7d8c71873fbabf-ultra-low_000008_9-02.mov

我需要编写一个bash脚本,批量重命名当前目录中的所有这些文件,以匹配以下结果:

ultra-low_000005.mov
ultra-low_000006.mov
ultra-low_000007.mov
ultra-low_000008.mov

我做的以下脚本是从所有这些文件中删除常量前缀部分:

#!/bin/bash

echo "Input prefix and press ENTER:"
read prefix
echo "Your prefix will be: $prefix"
echo "Continue? y/n:"
read continue
if [ $continue == "y" ]
then
  for f in $prefix*; 
  do 
    mv "$f" "${f#$prefix}"; 
  done
fi

但是这个脚本会留下带有最后一个不需要的部分的文件:

ultra-low_000008_9-02.mov

所以我认为可以使用正确构造的正则表达式完成,但我没有成功。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

for f in "$prefix"*; do 
  # removes prefix part
  temp="${f#$prefix}"

  # removes everything after last _ and then adds back extension .mov
  mv "$f" "${temp%_*}.${temp##*.}"
done