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
给定
.m4v
shell 变量中的一个名称,通过修剪第一个空格并添加文件名后缀name
来获得相应文件的名称。.srt
$name
.srt
这是用
${name%% *}.srt
. 这将删除最长的后缀字符串匹配*
,$name
然后添加.srt
到该结果的末尾。该
.srt
文件的新名称是$name
,但.m4v
文件名后缀更改为.srt
.这是用
${name%.m4v}.srt
. 这将删除(最短)后缀字符串匹配.m4v
,$name
然后添加.srt
到该结果的末尾。下面是一个循环,它使用上面的两个参数替换来重命名每个
.srt
文件,给定.mv4
在当前目录中找到的文件列表。该循环还让您知道是否存在.m4v
没有相应.srt
文件的文件,或者该.srt
文件的新名称是否已经存在。在
zsh
:它重命名
???.srt
文件,复制具有相同 3 个字符前缀r
的文件的 oot 名称,m4v
只要有一个这样的 m4v 文件。