このBashコマンドが括弧を置き換える正規表現を使用しないのはなぜですか?

このBashコマンドが括弧を置き換える正規表現を使用しないのはなぜですか?

Musicディレクトリ内のすべてのファイルとすべてのサブディレクトリを繰り返し、ファイル名の角かっこを括弧で置き換えるこのコマンドがあります。

find /home/Music/ -depth -name "* *" -execdir rename 's/\[/\(/g' "{}" \;

しかし、これはうまくいきません。エラーを返さずに交換のみを実行しません。

キャラクターを正しく脱出していると思いました。私はどこで間違っていますか?

{}また、結局中かっこ、を括弧、に変更したいと思います()。中かっこにより複雑になる場合に備えて、今この内容に言及しなければならないと思いました。

ベストアンサー1

うまくいかない理由がわかる唯一の理由は、名前にスペースがあるファイルがないことです。"* *"このパターンは、ファイル名にスペースが含まれている場合にのみ一致します。

名前に角かっこを含むファイルを見つけるには、次のようにします。

find /home/Music/ -depth -name "*[*" -execdir rename 's/\[/\(/g' "{}" \;

おすすめ記事