答案1
.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
已存在。
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
答案2
在zsh
:
for f (???.srt) () {
(( $# == 1 )) && mv -- $f $1:r.srt
} $f[1,3]?*.m4v(NY2)
只要有一个这样的 m4v 文件,就会重命名该???.srt
文件,并复制具有相同 3 个字符前缀的文件r
的 oot 名称。m4v