
答え1
.m4v
シェル変数に名前が与えられたら、name
最初のスペースを切り取り、ファイル名のサフィックスを追加してそのファイルの名前を取得します。.srt
$name
.srt
これはで行われます${name%% *}.srt
。これにより、一致する最も長いサフィックス文字列が削除され、結果の末尾*
に$name
追加されます。.srt
ファイルの新しい名前.srt
はですが、$name
ファイル名.m4v
のサフィックスはに変更されます.srt
。
これはで行われます${name%.m4v}.srt
。これにより、一致する.m4v
(最も短い)サフィックス文字列が削除され、結果の末尾に追加$name
されます。.srt
.srt
以下は、上記の2つのパラメータ置換を使用して、現在のディレクトリにあるファイルのリストが与えられたときに各ファイルの名前を変更するループです。.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文字を付けたファイルのoot名がコピーされますr
。m4v