我在同一个目录中有一组.m4v和.srt文件,但是名称只匹配前3个字符。如何重命名.srt文件以匹配相应的.m4v文件(当然,保留.srt扩展名)?

发布于 2022-06-12 10:28:10
给定.m4v变量name中的一个$name名称,则通过在第一个空格中裁剪D3并添加.srt文件名后缀来获得相应.srt文件的名称。
这是用${name%% *}.srt完成的。这将从*中移除与$name匹配的最长后缀字符串,然后将.srt添加到该结果的末尾。
.srt文件的新名称是$name,但是.m4v文件的后缀改为.srt。
这是用${name%.m4v}.srt完成的。这将从.m4v中移除匹配$name的(最短)后缀字符串,然后将.srt添加到该结果的末尾。
下面是一个循环,它使用上面的两个参数替换来重命名每个.srt文件,给定当前目录中的.mv4文件列表。此外,可以让您知道是否有一个.m4v文件没有对应的.srt文件,或者.srt文件的新名称是否已经存在。
for name in *.m4v; do
if [ ! -e "${name%% *}.srt" ]; then
printf 'Can not find .srt file for "%s"\n' "$name"
continue
elif [ -e "${name%.m4v}.srt" ]; then
printf '.srt file for "%s" already exists\n' "$name"
continue
fi >&2
mv -- "${name%% *}.srt" "${name%.m4v}.srt"
done发布于 2022-06-12 12:52:30
在zsh中:
for f (???.srt) () {
(( $# == 1 )) && mv -- $f $1:r.srt
} $f[1,3]?*.m4v(NY2)它重命名???.srt文件,以相同的3个字符前缀复制m4v文件的root名称,只要只有一个这样的m4v文件即可。
https://unix.stackexchange.com/questions/705886
复制相似问题