この一括名前変更機能をどのようにスクリプト化できますか?

この一括名前変更機能をどのようにスクリプト化できますか?

現在の作業ディレクトリには4つのフォルダがあります。各フォルダには、次の形式で名前が付けられた複数のファイルが含まれています。

HEXA DECA - Season 01 Episode 01 - name of episode
HEXA DECA - Season 01 Episode 02 - name of episode

名前を次に変更したいです。

HE'XA DECA - S01E01 - name of episode
HE'XA DECA - S01E02 - name of episode

sed私にとっては少し難しいことです。これを達成するための最良の方法は何ですか?

答え1

私はこれがvidirこれらの問題に対する最も柔軟で透明な解決策であることがわかりました。ここで、VIM または他のエディタを使用してファイル名でテキストファイルを編集すると、変更内容が適用されます。

答え2

個人的に私はmmvそのような仕事に使用します。他の人が使うものrename。私の試み(明らかにテストされていないので、その-nオプションを最初に試しました):

for dir in ....; do
    ( cd "$dir"; mmv -r "HEXA DECA - Season ?? Episode ?? - *" "HE'XA DECA - S#1#2E#3#4 - #5" )
done

私がcd最初に入ってこれをしなくて$dirmmv "$dir/..."大丈夫です。これは、ディレクトリに?または同じmmv用の特殊文字が含まれないようにするためです*

答え3

renameこのコマンドは必要な操作を実行します。

find . -type f -exec rename "s/^(.*\/)HEXA DECA - Season ([0-9]*) Episode ([0-9]*) (.*)\$/\$1HE'XA DECA - S\$2E\$3 \$4/" {} \; 

一重引用符ではエスケープできませんが、二重引用符では文字を'エスケープする必要があるため、バックスラッシュが必要です。$

ここでは、ディレクトリとサブディレクトリのすべてのファイルを見つけて名前を変更しようとします。

s/regexp/smthすべてのregexp一致をsmth

^(.*\/)はパスの最初の部分で、デフォルト名を持たないすべてのエントリが\$1

HEXA DECA - SeasonEpisode保存されていない部分ですが、マッチングに使用されるテンプレートです。

([0-9]*)\$2sはsumに保存されているシーズンとエピソードの数です\$3

(.*)$エピソード名を含む文字列の最後の部分\$4

2番目の部分では、sを見たいパターンに置き換えますs///\$N

関連情報