小写或重命名Mac OS X上目录中的所有文件

时间:2011-11-25 12:48:35

标签: macos uppercase lowercase tr mv

在花了几个小时之后,我放弃了,并且正在寻求帮助。这在以前的SO问题中得到了完美的回答:How do I rename all files to lowercase?

麻烦的是,它在Mac OS X上不起作用。所以我开始重做它以便它可以工作。学到一点关于强/弱引用的内容,我认为这与它有关。就目前而言,我对所有内容都使用了强烈的引用。

 #!/bin/bash
 echo ""; echo "Start run `basename $0` on `date`";
 echo "Script running from: `pwd`";

 # Change into the directory with the files to rename
 cd /Users/me/Desktop/files
 echo "Working on files in: `pwd`"; echo "";


 # Read in all files from a directory
 for file in *; do
      lowercase_filename=`echo $file | tr '[:upper:]' '[:lower:]'`;
      echo \'$file\' \'$lowercase_filename\';

      mv \'$file\' \'$lowercase_filename\';
      echo "--------------------";

 done

以下是上述脚本在运行时输出的内容:

 ./renamer.sh 

 Start run renamer.sh on Fri Nov 25 04:35:00 PST 2011
 Script running from: /Users/me/Desktop
 Working on files in: /Users/me/Desktop/files

 'This IS A test TEST.txt' 'this is a test test.txt'
 usage: mv [-f | -i | -n] [-v] source target
        mv [-f | -i | -n] [-v] source ... directory

出于某种原因,mv不起作用。然而,奇怪的是,如果我接受调试输出并手动运行它,它将正常工作。所以我有一个前后字符串的文件名,在这种情况下,before是混合大小写,after是小写。字符串以单个标记引用。我回应它们就像我将它们作为两个参数传递给mv命令一样。

'This IS A test TEST.txt' 'this is a test test.txt'

脚本给我一个错误,但是如果我手动运行这些命令:

 # "l" is an alias for ls with some args to remove fot files 
 # and other junk I don't want to see.

 me@whitebook:\ $cd files
 me@whitebook:\ $l
 -rw-r--r--+  1 me  staff     0 Nov 25 03:49 This IS A test TEST.txt
 me@whitebook:\ $mv 'This IS A test TEST.txt' 'this is a test test.txt'
 me@whitebook:\ $l
 -rw-r--r--+  1 me  staff     0 Nov 25 03:49 this is a test test.txt

正如您所看到的,该文件已使用小写重命名为“这是一个测试test.txt”。如果我可以手动mv这些,那么脚本环境中会发生一些让它感到困惑的事情。知道那可能是什么吗?

我应该可以像另一张海报那样对此进行单行处理,但无论我尝试什么,它都不适用于我。

感谢您提供任何指导。我在Mac OS X上,这是一些相关的系统信息...

$uname -a
Darwin whitebook.local 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug  9 20:56:15 PDT 2011; root:xnu-1699.24.8~1/RELEASE_I386 i386


 $bash --version
 GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
 Copyright (C) 2007 Free Software Foundation, Inc.

1 个答案:

答案 0 :(得分:4)

你能试试吗?

mv "$file" "$lowercase_filename";