如何将所有文件重命名为小写?

Vol*_*da2 111 macos bash file

我有例如TREE.wav,ONE.WAV.我想将它重命名为tree.wav,one.wav.如何将所有文件重命名为小写?

wjl*_*wjl 341

如果您对终端感到满意:

  1. 打开Terminal.app,键入cd然后将包含要重命名的文件的文件夹拖放到窗口中.
  2. 要确认您位于正确的目录中,请键入ls并按Enter键.
  3. 粘贴此代码并按Enter键:

    for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
    
    Run Code Online (Sandbox Code Playgroud)
  4. 要确认所有文件都是小写的,请键入ls并再次按Enter键.

(感谢Twitter上的@bavarious提供了一些修复,并感谢下面的John Whitley在不区分大小写的文件系统上使这更安全.)

  • 由于不区分大小写的文件系统,OS X用户应首先将每个文件重命名为临时名称,例如:`for f in*; 做mv"$ f""$ f.tmp"; mv"$ f.tmp""\`echo $ f | tr"[:upper:]""[:lower:]"\`"; done` (13认同)
  • 小心.如果你有名为`foo.txt`和`FOO.TXT`的文件,这可能会破坏其中一个. (9认同)
  • 我尝试了所有这些命令,我​​得到"mv:'PPP.txt'和'ppp.txt'是相同的文件"并且它不会小写我的文件...任何想法?是因为它在同一个目录中吗? (2认同)
  • user2066039:这一定是 Mac 上最近的事情,因为大多数超过一年的答案都没有考虑到它。我通过使用像“jpg1”这样的中间扩展来完成任务。所以,JPG -> jpg1 -> jpg。希望有帮助。 (2认同)

Ale*_*vey 7

所提出的问题很笼统,也很重要,因此,我想提供一个更笼统的答案:

最简单的情况(大多数情况下是安全的,在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)


ars*_*ius 5

鱼壳版本:

for old in *
    set new (echo $old | tr '[A-Z]' '[a-z]')
    mv $old $new
end
Run Code Online (Sandbox Code Playgroud)