Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash OSX文件重命名_Bash_Macos_File_Shell_File Rename - Fatal编程技术网

Bash OSX文件重命名

Bash OSX文件重命名,bash,macos,file,shell,file-rename,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#部分相同。文件名中可能有其他字母V 我发现这很有用,但我需要将新值指定给

我有以下名称模式的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#部分相同。文件名中可能有其他字母V


我发现这很有用,但我需要将新值指定给要替换的字符串。

您可以使用一个简单的正则表达式来完成此操作:

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的OSX上运行良好

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

您是否安装了
GNUCoreutils
?没有,我还没有。搜索前面的问题,我想也许可以解决这个问题?
brew安装重命名
。。。而且
重命名--help
看起来很有希望。鉴于
brew info
知识,“this”是由Perl驱动的文件重命名脚本[…]包装而成。HT18N字符串
$“..”
?@和LRC的原因是什么:这只是一种习惯;它应该使用或不使用
$
;在shellcheck.net上一切正常:)这在末尾有一个额外的V,这阻止了运行
r=$“V([0-9])V([0-9]*)V”
一旦删除它,它就可以正常工作,几乎可以正常工作,但是V#uu被放在文件名的末尾:
ABC12345V1_6789_V0-1_xyz.pdf ABC12345V1_6789_V0-1_xyz.pdfV1_