Cygwin下rename命令同名劫持函数,以支持类似CMD下ren xxx.abc xxx.cba重命名后缀名的功能

stevehe 2022年09月23日 148次浏览

函数代码:
加入会话配置文件(/etc/profile、~/.bash_profile etc...)即可在交互式终端调用:

rename() {
	#优化renname命令,使其支持类似CMD下`ren *.txt *.mp3`类似的操作
	#更改文件拓展名快速操作:
	#为避免通配符展开,使用本函数时应省略通配符,可以直接执行 rename .txt .mp3;
	#也可以使用引号包裹带通配符的参数:eg:rename '*.txt' '*.mp3'
	if [ $# -eq 2 -a -e "$1" ];then
		/usr/bin/mv -v "$@"
	elif [ $# -eq 2 ] && [[ "$1" =~ ^\*?\. && "$2" =~ ^\*?\. ]];then #批量更改文件拓展名;
		/cygdrive/${SYSTEMDRIVE/:/}/Windows/system32/cmd.exe /c  \
		'echo 批量更改拓展名 '"$1"' 为 '"$2"'...&' \
		ren '*'"${1//\*/}" '*'"${2//\*/}"
	else
		/usr/bin/rename "$@"
	fi
}
alias ren='rename' #别名ren,与CMD下ren命令同名,遵循DOS CMD下的使用习惯;

用法一: 重命名单个文件(实际调用了原生mv命令):

rename filename.mp4 newfilename.mp4

用法二:批量重命名文件拓展名
类似cmd下 ren *.aaa *.bbb的功能

rename .txt .mp4
#或者
rename '*.txt' '*.mp4'   #加引号以防止通配符展开

用法三:调用Linux系统原生rename命令;
具体使用方法请运行rename --help 查看帮助

rename xxxxx...
rename --help