我有例如TREE.wav,ONE.WAV.我想将它重命名为tree.wav,one.wav.如何将所有文件重命名为小写?
wjl*_*wjl 341
如果您对终端感到满意:
cd
然后将包含要重命名的文件的文件夹拖放到窗口中.ls
并按Enter键.粘贴此代码并按Enter键:
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
Run Code Online (Sandbox Code Playgroud)ls
并再次按Enter键.(感谢Twitter上的@bavarious提供了一些修复,并感谢下面的John Whitley在不区分大小写的文件系统上使这更安全.)
所提出的问题很笼统,也很重要,因此,我想提供一个更笼统的答案:
最简单的情况(大多数情况下是安全的,在Mac OS X上是安全的,但请继续阅读):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Run Code Online (Sandbox Code Playgroud)
您还需要处理文件名中的空格(任何操作系统):
IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Run Code Online (Sandbox Code Playgroud)
在区分大小写的文件系统中,您需要安全地处理仅因大小写而不同的文件名,并且不覆盖目标文件(例如Linux):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done
Run Code Online (Sandbox Code Playgroud)
关于Mac OS X的注意事项:
Mac的文件系统不区分大小写,保留大小写。
但是,无需按照已接受的答案和注释中的建议创建临时文件,因为两个文件名仅因大小写不同而不能存在于首位,即ref。
为了显示这一点:
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Run Code Online (Sandbox Code Playgroud)
鱼壳版本:
for old in *
set new (echo $old | tr '[A-Z]' '[a-z]')
mv $old $new
end
Run Code Online (Sandbox Code Playgroud)