現在の作業ディレクトリには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
最初に入ってこれをしなくて$dir
もmmv "$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 - Season
Episode
保存されていない部分ですが、マッチングに使用されるテンプレートです。
([0-9]*)
\$2
sはsumに保存されているシーズンとエピソードの数です\$3
。
(.*)$
エピソード名を含む文字列の最後の部分\$4
。
2番目の部分では、sを見たいパターンに置き換えますs///
。\$N