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