將數小時後,我放棄,並尋求幫助。這已在前面的SO問題中得到完美回答:How do I rename all files to lowercase?小寫或重命名Mac OS X上的目錄中的所有文件
問題是,它在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
不起作用。但是,奇怪的是,如果我使用調試輸出並手動運行它,它將正常工作。所以我有一個前後字符串的文件名,在這種情況下,前者是混合大小寫,後者是小寫。這些字符串以單個的tic標記引用。我將它們回顯出來,就像我將它們作爲兩條參數傳遞給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.
[email protected]:\ $cd files
[email protected]:\ $l
-rw-r--r--+ 1 me staff 0 Nov 25 03:49 This IS A test TEST.txt
[email protected]:\ $mv 'This IS A test TEST.txt' 'this is a test test.txt'
[email protected]:\ $l
-rw-r--r--+ 1 me staff 0 Nov 25 03:49 this is a test 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.
這是一個更適合superusers.com的問題,我想。 –
這是我最後的腳本,以防Mac OS X Lion或者更低版本的人正在尋找這種能力。我計劃添加--convertspaces更改「」爲「_」和--uppercase, - 序列(添加1. 2. 3.引導文件名,--aFewMoreIHaventTHoughtOf。 這只是我學習中的一個部分一些bash,所以它可能不是完全理想的,但我想學習一些東西,這個當前腳本可以小寫文件和目錄,當與同名目錄衝突時不會錯誤,並且離開Mac OS X前導點文件(隱形)獨自 – user170579
你可以從這裏下載最終(我感覺工作的)腳本:http://pastie.org/2943374將它複製到一個文本文件中,我稱之爲'lcaser'和chmod u + x,然後運行它作爲./lcaser/path/to/files,或者如果它在你的$ PATH中,你不需要./,並且可以使用lcaser/path/to/files – user170579