正規表現を使用して複数のフォルダの名前を変更する

正規表現を使用して複数のフォルダの名前を変更する

タイトルにあるように、私はコマンド/ツールを探しています。できればターミナルから実行できるもの (リモート サーバーで Ubuntu を使用しています) で、複数のディレクトリの特定の部分を一度に置き換えることができるものを探しています。フォルダー構造は次のようになります。

Example.of.Structure[app]

Another.Example[app]

Third.Example.of.Structure[app]

そして、すべてのフォルダの名前を変更して、フォルダ名から [app] の部分が削除されるようにします。

基本的な正規表現を試してみました。角括弧とその中のテキストを一致させます。

これは私が使用したときにはうまく機能しているようです「それを見つける」- しかし、それをコマンドにどのように組み込むかは本当にわかりません。

括弧内のテキスト (括弧自体も含む) を検索するために私が考えた正規表現は次のとおりです。\[\w+\]

しかし、これをコマンドに組み込むにはどうすればいいのでしょうか?

ありがとう。

答え1

これには正規表現は必要ありません。単純なシェル glob とパラメータ拡張で実行できます。

$ for f in *\[*\]/; do echo mv "${f}" "${f/\[*\]}"; done
mv Another.Example[app]/ Another.Example/
mv Example.of.Structure[app]/ Example.of.Structure/
mv Third.Example.of.Structure[app]/ Third.Example.of.Structure/

(echo提案された置換が正しいことを確認したら、 を削除します)。

正規表現ベースのツールを使用したい場合は、Perl ベースrename/prenameが当然の選択です。

$ rename -n 's/\[\w+\]//' */
rename(Another.Example[app]/, Another.Example/)
rename(Example.of.Structure[app]/, Example.of.Structure/)
rename(Third.Example.of.Structure[app]/, Third.Example.of.Structure/)

(-n提案された置換が正しいことを確認したら、 を削除します)。

これらは両方とも初めパターンの出現。[app]パターンが他の場所に出現する可能性がある場合には、一致をパターンの末尾に固定することを検討してください。文字列の開始と終了のアンカー

関連情報