これに何時間も費やした後、私はあきらめて、助けを求めています。これは、以前のSOの質問で完全に回答されています:すべてのファイルの名前を小文字に変更するにはどうすればよいですか?
問題は、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
動作しません。ただし、奇妙なことに、デバッグ出力を取得して手動で実行すると、正常に機能します。したがって、ファイル名の前後の文字列があります。この場合、前は大文字と小文字が混在し、後は小文字です。文字列は単一の目盛りで引用されます。コマンドに2つの引数として渡すのと同じように、それらをエコーアウトし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
、スクリプト環境内で何かが発生しているため、混乱しています。それが何であるかについて何か考えはありますか?
他のポスターと同じように一列に並べることができるはずですが、何を試してもうまくいきません。
ガイダンスをありがとう。私はMacOSXを使用していますが、関連するシステム情報がいくつかあります...
$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.