如果您对终端感到满意:
cd
ls
并点击Enter.ther this代码并点击输入:
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
ls
并重新点击Enter。
(感谢@bavarious在Twitter上的一些修复程序,并感谢下面的John Whitley对案例不敏感的文件系统更安全。)
提出的问题是一般的,也很重要,因此我希望提供一个更普遍的答案:
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
您需要安全处理仅在情况敏感文件系统中因情况而差异而不是覆盖目标(例如Linux)的文件名:
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done
关于Mac OS X的注意:
MAC的文件系统是对病例敏感的,病例保护的。 但是,正如接受的答案和评论中建议的那样,无需创建临时文件,因为两个只有因情况而异的文件名不存在,ref
.
。显示以下内容:
$ mkdir test
$ cd test
$ touch X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 X
$ mv X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 x
鱼壳版本:
for old in *
set new (echo $old | tr '[A-Z]' '[a-z]')
mv $old $new
end
对于那些想要在电流目录和子目录中降低
文件的人
::
简单的解决方案是通过在循环中使用tr
命令。
for file in ./* ; do
mv "$file" "$(tr '[:upper:]' '[:lower:]' <<<"$file")"
done
您可以在此处了解有关
tr
命令的更多信息。