Команда 'find', не смогла использовать '{}' после оператора '>' в Mac OS X - PullRequest
0 голосов
/ 22 июня 2011

Я собираюсь преобразовать кодировку некоторых файлов из GBK в UTF-8.

Можно запустить следующую команду в Linux:

find Bnf -type f -exec iconv -f GBK -t UTF-8 {} -o utf8/{} \;

Но в Mac OS X, iconv не имеет опции -o, все выходные данные отправляются на стандартный вывод.

Итак, я изменил команду на:

find Bnf -type f -exec iconv -f GBK -t UTF-8 {} > utf8/{} \;

Но последний '{}' не былзаменен путями к файлам, но был оставлен буквальным.

Может быть, я мог бы создать сценарий bash, чтобы обернуть iconv и оператор '>', но есть ли лучший способ заставить его работать?

Спасибо.

1 Ответ

2 голосов
/ 22 июня 2011

Вам лучше запустить iconv за пределами find.И, вероятно, вы должны запустить basename.

find Bnf -type f |\
while read line; do
  FILE=`basename $line`
  iconv -f GBK -t UTF-8 $line > utf8/$FILE
done

И если вы хотите сохранить структуру каталогов

find Bnf -type f |\
while read line; do
  mkdir -p utf8/`dirname $line` 2> /dev/null
  iconv -f GBK -t UTF-8 $line > utf8/$line
done
...