ファイル名をサブディレクトリに変更します。

ファイル名をサブディレクトリに変更します。

「名前の変更」を使用して複数のファイルの名前を変更しようとしていますが、正規表現が正しく設定されています。

rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1).$3|' *

しかし、私は各ファイルを共通の起動を持つディレクトリに入れたかったので、次のように試しました。

rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3|' *

しかし、これはディレクトリが存在しないと文句を言います(存在しないため)。便利な名前変更フラグが欠落しているのですか、それとも良いツールですか?

答え1

Perlベースを使用している場合、欠落しているディレクトリの作成をrename呼び出すのに邪魔になることはありません。mkdir()

rename --verbose '
    s|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3| &&
    mkdir("$2 ($1)")' *

これは、使用するPerl式と同じですが、式が一致mkdir()したときにディレクトリを生成するために最後に呼び出しを追加します。

元の置換が正しいかどうかはわかりません(どのタイプのファイル名があるのか​​わかりません)。要点は、式が通常のPerl式なので、$_(デフォルト変数)が最後に結果ファイル名に設定されている限り、どのPerlコードでも自由に使用できることです。

関連情報