Переименуйте файлы и каталоги с французскими символами

Я пока не могу оставлять комментарии, поэтому спрашивайте здесь. Как вы установили проприетарные драйвера? Я делал это несколько раз в своих системах и постоянно забываю точные шаги, но я просто запускаю один -файл, загружаемый с nvidia из оболочки, и он помогает мне (обычно запускать из терминала с правами root. -без X ). Важно, чтобы он компилировал необходимые библиотеки с вашими текущими библиотеками ядра.

Кроме того, проверяли ли вы настройки /usr/bin/nvidia -? (думаю, просто для общей проверки настроек ).

А как насчет Xorg.0.log? Он должен давать больше подробностей об ошибках, чем dmesg.

4
14.08.2019, 14:36
1 ответ

Предполагая, что эти имена файлов закодированы в UTF -8, используйте:

find. -depth -execdir rename -n '
  utf8::decode$_ or die "cannot decode $_\n";
  s{[^\w.\@+,#!?:&%~()\[\]/ -]}{?}gs;
  utf8::encode$_;
  ' {} +

(удалите -nкогда счастливы ).

Имейте в виду, что некоторые реализации BSD findне добавляют к именам файлов префикс ./с префиксом -execdir, так что эта команда может завершиться ошибкой, если есть имена файлов, начинающиеся с -. С вашим вариантом renameвы сможете обойти это, изменив rename -nна rename -n --(, который не будет работать со всеми другими вариантами perl rename).

В современных версиях perl,\w(для слова символ )— это любой буквенно-цифровой (в любом алфавитном письме, а не только латинский ), или символ подчеркивания плюс другой символы пунктуации соединителя плюс знаки Unicode (, например, включает сочетание острого ударения , которое следует за eв разложенной формеé).

Если вы хотите быть более строгим, вместо \wвы можете использовать \p{latin}\p{mark}0-9_, чтобы включать только буквы латинского алфавита (, а не кириллицу, греческий... ), комбинированные диакритические знаки (, но не ограничиваясь теми, которые обычно используются с латинскими буквами ), и только индийско-арабскими десятичными цифрами (, а не другими видами цифр )и символом подчеркивания (, а не другими знаками пунктуации соединителя ).

Если вы не используете utf8::decode, perlбудет предполагать, что символы закодированы в iso8859 -1 набор однобайтовых символов (, например, где0xc3 0xa9(кодировка UTF -8 предварительно -составленная формаé)естьé).

В качестве альтернативы вы можете использовать zsh(, который будет декодировать символы в соответствии с кодировкой локали. (см. выводlocale charmap)):

autoload zmv # best in ~/.zshrc
zmv -n '(**/)(*)(#qD)' '$1${2//[^][:alnum:]_.@+,#!?:&%~()[\/ -]/?}'

Каждый байт из любой последовательности байтов, которые не образуют допустимые символы в вашей локали, также будет преобразован в ?(, где renameвыше умрет с ошибкой cannot decode).

Его [[:alnum:]]использует категорию alnumвашей локали, поэтому маловероятно, что он будет включать другие знаки пунктуации или знаки соединителя Unicode.

Как в perl, так и в zsh(, но часто не в других инструментах ), диапазоны, такие как [a-zÀ-ÿ], основаны на кодовой точке символов. Например, azÀÿ— это \u0061\u007A\u00C0\u00FF, поэтому этот диапазон будет соответствовать символам abcdefghijklmnopqrstuvwxyzÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿв том диапазоне кодовых точек (, который включает не -буквенные символы и не все символы латинского алфавита или используемые во французском языке. язык типаœ). В perlвам также нужно добавить use utf8, чтобы иметь возможность использовать кодировку UTF -8 Àи ÿв коде Perl.

5
27.01.2020, 20:53

Теги

Похожие вопросы