Аргумент для convmv
Довелось недавно скачать кривой торрент. Выражалась эта кривость в неверной кодировке имён файлов. В итоге получилось что-то такое:
$ ls -1 | head -1
????????
Есть замечательная программа convmv, которая нам поможет. Но при попытке её использовать возникла небольшая проблема. Как её решить?
Дело в том, что подсунуть аргумент этой программе не получается:
$ convmv -f CP1251 -t utf8 -r ????????
file or directory not found: ????????
Графический эмулятор терминала искажает символы, и скопировать их не удаётся. Поэтому мы пойдём иным путём. Сначала убедимся, что кодировки для преобразования выбраны верно:
$ ls -1 | head -1 | iconv -f CP1251 -t utf8
Телевизор
Хоть что-то по-русски. Теперь, собственно, преобразование:
ls -1 | head -1 | xargs convmv -f CP1251 -t utf8 -r --notest
Но перед тем, как это выполнить, обратите внимание на последний ключ notest. Если его не указать, то фактического переименования файлов не будет – программа только покажет, что и во что собирается переименовать. Для начала можно попробовать запустить без него и убедиться, что всё пройдёт точно так, как надо. Для реккурсивного обхода каталогов предназначен ключ -r.
Таким образом, мы с помощью xargs указали программе convmv аргумент, состоящий из непечатаемых символов.