単一のbashコマンドを使用して一括してフォルダ名を変更する

単一のbashコマンドを使用して一括してフォルダ名を変更する

次のフォルダ設定があります。

/path/to/directory/SLUG_1/SLUG_1 - SLUG_2 - SLUG_3

SLUG_2は年であり、「1994」や「2003a」などの文字が後に続くことがあります。

このファイルの名前を次に変更したいと思います。

/path/to/directory/SLUG_1/SLUG_2 - SLUG_3

私はこのコマンドに非常に近いです。

find $root -mindepth 2 -maxdeth 2 -type d | sed "s#\(\(/path/to/directory/[^/]*/\).* - \([0-9]\{4\}[a-bA-B]\? - .*\)\)#mv "\1" "\2\3"#

これは以下を印刷します:

mv "/path/to/directory/SLUG_1/SLUG_1 - SLUG_2 - SLUG_3" "/path/to/directory/SLUG_1/SLUG_2 - SLUG_3"

これが私が実行したいコマンドです。しかし、実行することはできません。

出力を変数に割り当て、その変数を呼び出して実行してみました。それは動作しません。このアイデアをいくつか変えてみましたが、エラーが発生しました。

ここにいくつかのツールがありません。いくつかの繰り返しツールを使用すると、これを簡単に作成できます。どんな提案がありますか?

ベストアンサー1

すべてのサブディレクトリが/path/to/directory次の命名規則に従うと仮定します。

cd /path/to/directory
prename -n 's~/\d{4}[a-z]? - ~/~i' */*

prename~であるパールの名前を変更する(どんなバリエーションでも可能です)。

おすすめ記事