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