Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何将所有文件重命名为小写?_Macos_File_Bash - Fatal编程技术网

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

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

例如,我有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
    
  • 要确认所有文件都是小写的,请键入
    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