Macos 如何将所有文件重命名为小写?
例如,我有TREE.wav,ONE.wav。我想把它重命名为tree.wav,one.wav。如何将所有文件重命名为小写 如果您对终端感到满意:Macos 如何将所有文件重命名为小写?,macos,file,bash,Macos,File,Bash,例如,我有TREE.wav,ONE.wav。我想把它重命名为tree.wav,one.wav。如何将所有文件重命名为小写 如果您对终端感到满意: 打开Terminal.app,键入cd,然后将包含要重命名文件的文件夹拖放到窗口中 要确认您在正确的目录中,请键入ls,然后按enter键 粘贴此代码并按enter键: for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
cd
,然后将包含要重命名文件的文件夹拖放到窗口中ls
,然后按enter键for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
ls
,然后再次按enter键(感谢twitter上的@bavariable提供了一些修复,也感谢下面的John Whitley使其在不区分大小写的文件系统上更安全。)所问的问题是一般性的,也是重要的,因此我希望提供一个更一般的答案: 最简单的情况(大多数情况下是安全的,在Mac OS X上,但请继续阅读): 鱼壳版:
for old in *
set new (echo $old | tr '[A-Z]' '[a-z]')
mv $old $new
end
对于希望将当前目录和子目录中的所有文件小写的用户:
# 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
您对终端/外壳解决方案是否满意?或者你想要C/Objective-C代码来完成这个任务?终端解决方案就可以了。我认为应该重新打开它。终端代码也是代码这应该是关于stackoverflow的有效问题。这也是代码。小心。如果您有名为
foo.txt
和foo.txt
的文件,这可能会破坏其中一个文件;mv“$f”“$g”我尝试了所有这些命令,我得到了“mv:'PPP.txt'和'PPP.txt'是同一个文件”,它不小写我的文件。。。有什么想法吗?这是因为它在同一个目录中吗?user2066039:这一定是Mac上最近的一件事,因为大多数超过一年的答案都不能解释这一点。我通过使用像“jpg1”这样的中间扩展来完成任务。所以,JPG->jpg1->JPG。希望helps.OS X用户应该首先将每个文件重命名为临时名称,因为文件系统不区分大小写,例如:for f in*;做mv“$f”“$f.tmp”;mv“$f.tmp”“`echo$f|tr”[:上限:”“[:下限:”;完成
是-但您的示例建议您可以使用“mv X”将文件名小写。所以我只是对它发表了评论。mojave 10.14.5:#touch X X#ls-la total 0-rw-r--r--1 root root 0 Jun 24 15:19 X#mv X mv:'X'和'X'是同一个文件#ls-la-rw-r--r--1 root 0 Jun 24 15:19 XSorry用于糟糕的格式。我的坏消息是,在共享驱动器(hfsplus格式)上的树莓上有一个ssh,但它不起作用。但在我的mac电脑上是这样的;do j=$(tr'[:上限:'[:下限:''
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done
for old in *
set new (echo $old | tr '[A-Z]' '[a-z]')
mv $old $new
end
# 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