22

我知道有人问过,但到目前为止我发现的还没有解决。我来的壁橱是这样的:rename -n 'y[A-Z]/[a-z]/' * 它适用于当前目录。我不太擅长 Linux 终端,所以我应该在此命令中添加什么以将其应用于我所在的所有子目录中的所有文件,谢谢!

4

2 回答 2

34

find这是使用and的一种方法tr

for i in $(find . -type f -name "*[A-Z]*"); do mv "$i" "$(echo $i | tr A-Z a-z)"; done

编辑; 添加:-name "*[A-Z]*"

这样可以确保只找到带有大写字母的文件。例如,如果找到只有小写字母的文件并将其移至同一文件,mv则会显示are the same file错误。

于 2012-10-24T15:02:22.137 回答
10

Perl 有一个区域设置感知lc()功能,它可能会更好地工作:

find . -type f | perl -n -e 'chomp; system("mv", $_, lc($_))'

请注意,此脚本处理文件名中的空格,但不处理换行符。并且没有防止碰撞的保护,如果你有“ASDF.txt”和“asdf.txt”,一个会被破坏。

于 2012-10-24T16:10:44.983 回答