OS X 文件重命名
OS X 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 很有用,但我需要将新值分配给要替换的字符串。
您可以使用简单的正则表达式来完成此操作:
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
此脚本在没有 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 fsfs}')
mv -v "$f" "$newfile"
done
只需将上面的内容复制到rename.sh
,然后chmod 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
我有具有以下名称模式的 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 很有用,但我需要将新值分配给要替换的字符串。
您可以使用简单的正则表达式来完成此操作:
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
此脚本在没有 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 fsfs}')
mv -v "$f" "$newfile"
done
只需将上面的内容复制到rename.sh
,然后chmod 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