「|」の最初の出現を削除する次のコマンドがあります ファイルの名前から「!」に置き換えます。
rootcmd -s sh -c "find . -type f | grep '|' | rename '|' '!' *"
操作するファイルと同じディレクトリから実行すると、正常に動作します。これを子ディレクトリと呼びましょう。ただし、複数の子ディレクトリを持つ親ディレクトリがあります。親ディレクトリから実行すると、名前の変更が機能しません。すべての子ディレクトリをトラバースして、同じ操作を行いたいです。興味深いことに、コマンドの最初の部分 (名前の変更を除く) が機能することがわかっています。
rootcmd -s sh -c "find . -type f | grep '|'"
上記は、「|」を含むすべての子ディレクトリ内のすべてのファイルを返します ファイル名に。ただし、名前変更コマンドを追加すると、ファイルの名前が意図したとおりに変更されません。
これを説明または修正できるLinux / Bashの専門家はいますか?