Переименование множества файлов с помощью for i in
Win32)
Привет!
При переносе архива в Линукс посучилось так, что имена файлов стали CP1251 кракозябрами.
Надо перекодировать их в KOI8. Я делаю так:
for i in `find . -type f`;do mv $i `echo $i | iconv -f CP1251 -t KOI8R`;done
И все бы ничего, если б не имена с пробелами. for i in * разбивает строку содержащую
пробелы на подстроки и получается, что вместо файла "file name.ext" я имею два
файла "file" и "name.ext".
Как выйти из этой ситуации и переименовать все файлы?
Александр Артёмен ко wrote:
Вот for i in * как раз таки и не разбивает
Надо писать
mv "$i" "`echo $i | iconv -f CP1251 -t KOI8R`"
Обратите внимание на двойные кавычки.
Я сам использовал следующий скрипт:
#! /bin/bash
req='utf-8..koi8-r'
[[ $# == 1 ]] && req=$1
for x in *
do
if [[ -d "$x" ]]
then
cd "$x"
$0
cd ..
fi
mv "$x" "`echo \"$x\" | recode $req`" 2> /dev/null
done
Другой вариант (не пробовал)
find . -type f -exec mv "{}" "`echo \"{}\" | recode cp1251..koi8-r`" 2> /dev/null
';'