строчные буквы или переименовать все файлы в каталоге на Mac OS X - PullRequest
1 голос
/ 25 ноября 2011

После долгих часов я сдаюсь и прошу помощи.На этот вопрос отлично ответили в предыдущем вопросе 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 нетРабота.Тем не менее, что странно, если я возьму выходные данные отладки и запусту их вручную, все будет работать нормально.Таким образом, у меня есть до и после строки имени файла, в данном случае, before это смешанный регистр, а after это строчные буквы.Строки заключены в одинарные метки.Я повторяю их так же, как передал бы их как два аргумента команде * 1012.

'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 Ответ

4 голосов
/ 25 ноября 2011

Можете ли вы попробовать это?

mv "$file" "$lowercase_filename";
...