バッチファイルの名前変更

バッチファイルの名前変更

次のようなファイル名を持つファイルがたくさんあります。

myvideo.s01e01.episode.title.here.mp4
myvideo.s01e02.episode.title.here.mp4

一括して名前を変更したいので、次のようになります。

myvideo.s01e01.mp4
myvideo.s01e02.mp4
etc.

私はmacOSを使用していますが、ファイルがネットワーク共有にあるので、Linux経由でもアドレスを指定できます。

答え1

そしてzsh

autoload zmv
zmv -n '(*.s<->e<->).*(.mp4)' '$1$2'

満足したら削除してください-n(テスト実行)。

答え2

アクセス権がある場合perl-renamerename一部のLinuxディストリビューション、prename他のディストリビューションperl-renameなどから呼び出されます)、次のことができます。

$ rename -n 's/(.+?\..+?\.).*\.(.*)/$1$2/s' *mp4
myvideo.s01e01.episode.title.here.mp4 -> myvideo.s01e01.mp4
myvideo.s01e02.episode.title.here.mp4 -> myvideo.s01e02.mp4

これは実際に名前を変更せずにコマンドが実行するジョブを印刷します。期待した結果が出力されたら、-n実際にファイル名を変更せずにコマンドを実行してください。

ファイル名がなく、perl-renameファイル名に改行文字が含まれておらず、すべてのバイトがユーザーロケールの有効な文字で構成されている場合は、シェルから直接これを行うこともできます(これはzsh-likeシェルとBSD互換のsed実装を想定しています)。

for f in *mp4; do 
    newName=$(sed -E 's/(([^.]*\.){2}).*\.([^.]*)$/\1\3/' <<<"$f"); 
    echo mv -- "$f" "$newName"; 
done

正しく表示されたらecho

関連情報