`tr`が検索とコマンド置換で機能しないのはなぜですか? [コピー]

`tr`が検索とコマンド置換で機能しないのはなぜですか? [コピー]

フォルダ内のすべてのファイルを小文字から大文字に変換/「翻訳」したいと思います。forループを使用してこれを行うことができます。

for i in ./* ; do mv $i $(echo $i | tr "a-z" "A-Z") ; done
for i in `find . -maxdepth 1 -mindepth 1` ; do mv $i $(echo $i | tr "a-z" "A-Z") ; done

trしかし、次の範囲ではなぜ機能しないのか知りたいですfind

find . -maxdepth 1 -type f -exec mv {} $(echo {} | tr "a-z" "A-Z") \;

ファイル名を再印刷して大文字に変更します。findバージョンが機能しないのはなぜですか?

私の目標はループでfindはなく使用することですfor

答え1

代わりに使用してくださいrename

find . -maxdepth 1 -type f -exec rename 'y/a-z/A-Z/' {} +

{}サブシェルでは拡張されません。

関連情報