サブディレクトリ内のファイルの名前を変更する

サブディレクトリ内のファイルの名前を変更する

私は「rename」を使用して多数のファイルの名前を変更しようとしており、正規表現を適切に設定しています。

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 コードを自由に使用できるということです。

関連情報