シェルを使用してファイル名の単語を変更するには?

シェルを使用してファイル名の単語を変更するには?

私の顧客の一つは学校です。ファイルサーバーでは、すべてのプロジェクトに同じ名前付けスキームを持つディレクトリがあります。

<姓>、<名前> <2番目の名前>? - <プロジェクト説明>

たとえば、

Miller, John Andrew - 長いプロジェクトの説明
Willis, Bruce - 説明、コンマを含めることができます
Lewis, Mary Jane - 説明 - マイナス記号付き

新しい命名規則は次のとおりです。

<名前> <2位>? <姓> - <プロジェクトの説明>

たとえば、

John Andrew Miller - 長いプロジェクトの説明
ブルース・ウィリス(Bruce Willis) - 説明、カンマを含めることができる
Mary Jane Lewis - 説明 - マイナス記号付き

今、すべての既存のフォルダの名前を新しいルールに一括変更する方法は?

ベストアンサー1

ファイル名の説明部分には、パターン-(2つのスペースの間のハイフン)を含めることができるため、特定のシンボルに変更できます。いいえ説明セクションに表示されます。を選択しましたが、£純粋にランダムでした。

rename 's/ - /£/' *
rename 's/([^,]*), ([^£]*)£/$2 $1 - /' *

s/ - /£/' tells rename to replace the first instance of- it finds with£ . The second command is a bit more complicated. Parenthases (() ) are used to group selections together -- so everything that matches the pattern within the first set of parens can be called later as$1 (all the way up to$9 ).[^,] means 'any character, except for,';means 'zero or more of the previous character';[^,]`は、「カンマ以外のすべての文字が0個以上ある」を意味します。名前の変更は基本的に貪欲なので、可能な限り長い文字列と一致します。

残りは自然に出てくると思います。

ファイル名に記号が表示されるかどうかわからない場合は、次を実行してください。

printf '%s\n' *£*

Perl-renameがある場合:

rename 's/([^,]*), (.*) - /$2 $1 - /' *

ファイル名の説明部分に-(たとえば、-2つのスペースの間にaが含まれている場合)、問題が発生します。

テストにはこのフラグを使用する必要があります-n。ファイル名は変更されませんが、その内容が表示されます。会議完成した:

rename -n 's/([^,]*), (.*) - /$2 $1 - /' *

おすすめ記事