
次のような命名規則を使用しているビデオファイルがいくつかあります
いくつかの単語-SxxExx.extension
これは私の好みです。残念ながらこの形式のファイルがたくさんあります
削除したい単語SxxExx.extension
Exx 部分の後のすべてを自動的に削除する必要があります。
答え1
'sがプレースホルダーであると仮定するとx
、zmv
次のように実行できるはずです。
zmv -nv '(*S??E??)*.ext' '$1.ext'
% touch foo-S01E02-garbage.ext bar-S07E17-moregarbage.ext
% zmv -nv '(*S??E??)*.ext' '$1.ext'
mv -- bar-S07E17-moregarbage.ext bar-S07E17.ext
mv -- foo-S01E02-garbage.ext foo-S01E02.ext
'(*S[0-9][0-9]E[0-9][0-9])*.ext'
の代わりに数字だけを一致させるためにを使用することもできますx
。
または、以下を使用したい場合sed
:
for f in *.ext; do
echo mv -n "$f" "$(echo "$f" | sed -e 's/\(S[0-9][0-9]E[0-9][0-9]\).*\.ext/\1.ext/')"
done
または Perlrename
コマンド (Debian ではどうやらこう呼ばれているようですfile-rename
):
file-rename -n -v 's/(S[0-9]{2}E[0-9]{2}).*\.ext/$1.ext/' *.ext
(実際に名前の変更を行うには、echo
の先頭から を削除し、とからフラグを削除します。一方で、 は既存のファイルを上書きしないように指示します。これは、少なくとも GNU では機能します。)mv
-n
zmv
file-rename
mv -n
mv
答え2
いかがでしょうか
$ echo 'some-words-SxxExx-words-I-want-to-remove.extension' | sed 's/\(S..E..\)[^.]*/\1/'
some-words-SxxExx.extension
(ただし、zsh 愛好家であれば、シェル置換を使用してもっと簡単に実行できると思います)。