拡張子は他の2つの同様のファイル名を最初のファイルと変更しますが、拡張子は保持します。

拡張子は他の2つの同様のファイル名を最初のファイルと変更しますが、拡張子は保持します。

同じディレクトリに複数の.m4vおよび.srtファイルセットがありますが、名前は最初の3文字しか一致しません。その.m4vファイルと一致するように.srtファイルの名前を変更するにはどうすればよいですか?

ここに画像の説明を入力してください。

ベストアンサー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

おすすめ記事