Русская кодировка в консоли
Опубликовано Виктор в 11.12.2008 в 10:44
Требуется скрипт, чтобы выполнять копирование папки на другой раздел диска. Пишу в файл: cp -r /home/<user>/Desktop/Papka/ /mnt/hda1
Выполняю через консоль этот файл - всё ок. Но если у папки русское имя, например так:
cp -r /home/<user>/Desktop/Папка/ /mnt/hda1
то ругается:
can not execute binary file.
Беру в кавычки - не помогает. женский интернет журнал
и с одинарными не помогает?
А какое точное имя папки? Нет ли в имени, например, воскликцательного знака или других специальных символов bash?
попробуй вот как...
cp -r /home/<user>/Desktop/ "тут нажать Tab" и посмотри какие варианты тебе предложат, потом просто напиши пару нчальных символов нужной директории и опять таб, и так до конца пути))
Подозреваю, что при русских буквах в начало файла редактор добавляет byte order mark. Стереть их можно из какого-нить достаточно тупого по отношению к этому символу редактора, типа mcedit.
С одинарными кавычками не помогает, спецсимволов нет, даже пробовал писать только в верхнем и только в нижнем регистре.
mcedit не показывает никаких символов перед русскими, а их самих отображает корректно (не ожидал). Стирал все русские буквы и предыдущий слэш, набирал заново. Может мне более старая версия нужна, а то эта больно умная!
А может кодировка другая нужна? ALT Linux - русифицирован из коробки...
Попробуй заменить название папки вопросами(ну или любыми wildcard'ами), например "../моя папка/" = "../???\ ?????". Это должно показать, с локалью ли проблемы
Заменяю на четыре русских вопросительных знака - работает.
Заменяю на ??\? (то есть /home/<user>/Desktop/??\?/)- пишет:
cp: невозможно выполнить stat для `/home/<user>/Desktop/???/': Нет такого файла или каталога
Кстати, насчет "моя папка": в названии даже пробелов нет.
а ну-ка приведи полный цикл твоих действий, т.е.
cp -r /home/user/folder /mnt/sda1/
и потом как ты записываешь в файл и как этот файл выполняешь, т.е.
echo "cp -r /home/user/folder /mnt/sda1/" > file
chmod ug+x file && ./file
ругается на последнем этапе?
cp -r /home/<user>/Desktop/Папка/ /mnt/hda1 записываю в файл Kedit'ом или Kwrite'ом, называю его, например /1 ; затем в консоли ввожу имя этого файла энтер, соответственно выполняется его содержимое или не выполняется, а пишет: can not execute binary file..
Про chmod совсем забыл, надо бы добавить.
Сейчас ваш способ попробую.
P.S. Ах, если бы sda, а не hda )))
to Алексей Польский
Вашим способом русский кусок в файл вообще не записывается, будто я его и не набирал! ! !
тааак, тогда сделайте 2 вещи:
покажите вывод команды set | grep LC
ну и во-вторых что вам покажет терминал если сделать echo "тест....тест...тест" > file && cat file
set | grep LC выдаёт
MAILCHECK=60
echo "тест....тест...тест" > file && cat file выдает
тест....тест...тест
Да и в сам файл записалось нормально(это вышибает мне мозг!), сейчас добавлю 1 английский символ.
И с английским работает, я что-то растерян, сейчас целиком напиcал файл копирования из консоли и опять can not execute binary file.
приведите полный текст вашего файла
#!/bin/bash
в первой строчке скрипта есть?
необязательное условие раз, скриптом это назвать сложно - два
#!/bin/bash - нет, попробую. Скриптом я это назвал, ибо другого слова не знаю.
Полный текст - одна команда:
cp -r /home/user/Desktop/Папка/ /mnt/hda1
В перспективе хотелось бы ещё копировать и по сети, но у меня самба недонастроена, так что это потом.
Редактируй файл консольным редактором! Жесть..
Поставил #!/bin/bash в первую строку и все заработало.
А-га-а-а-а-!!!! :)
Да, спасибо огромное. Кстати дописал, он у меня теперь и по сетке копирует.