OS X文件重命名

时间:2016-06-24 10:17:44

标签: bash macos file shell file-rename

我的PDF格式如下:

ABC12345V1_6789_V0-1_xyz.pdf
ABC12345V4_6789_V3-7_xyz.pdf

重要部分是 V# V# - #。无论第一个 V 之后的数字是多少,第二个 V 之后的数字总是少一个。我想创建一个将上述模式重命名为以下模式的服务:

ABC12345V1_6789_V1_xyz.pdf
ABC12345V4_6789_V4_xyz.pdf

基本上 V# - #部分必须与文件名中的第一个 V#相同。文件名中可能有其他字母Vs。

我发现mac os x terminal batch rename很有用,但我需要将新值分配给要替换的字符串。

2 个答案:

答案 0 :(得分:1)

您可以使用简单的正则表达式来完成此任务:

r=$"V([0-9])_([0-9]*)_V";

for f in *.pdf; do
    if [[ $f =~ $r ]]; then
        mv "$f" "${f/_*_/_${BASH_REMATCH[2]}_V${BASH_REMATCH[1]}_}";
    fi
done

结果:

ABC12345V1_6789_V0-1_xyz.pdf ABC12345V1_6789_V1_xyz.pdf
ABC12345V4_6789_V3-7_xyz.pdf ABC12345V4_6789_V4_xyz.pdf

答案 1 :(得分:0)

此脚本在没有GNU coreutils的OS X上运行良好。

#!/bin/bash

for f in *.pdf
do
    _fs=$(echo "$f" |grep -o "V[0-9]_")
    newfile=$(echo "$f" | awk -F"V[0-9][^_]*_" -v fs=$_fs '{print $1fs$2fs$3}')
    mv -v "$f" "$newfile"
done

只需将上面的内容复制到rename.shchmod u+x rename.sh,它就会重命名当前目录中的所有文件。

$ echo $BASH_VERSION
3.2.57(1)-release

$ grep --version
grep (BSD grep) 2.5.1-FreeBSD

$ awk --version
awk version 20070501