为什么 `tr` 不能与 find 和命令替换一起使用?

为什么 `tr` 不能与 find 和命令替换一起使用?

我想将文件夹中的所有文件从小写转换/“翻译”为大写。我可以使用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/' {} +

不会{}在您的子 shell 中扩展。

相关内容