Важливо розуміти, що це не такий тип «пошкодження файлової системи», який fsckдопоможе. Що стосується файлової системи, то назви файлів можуть бути будь-якою послідовністю байтів , якщо жоден байт не має значення 0x00 (ASCII NUL, маркер кінця рядка) або 0x2F ( /роздільник каталогів). (Якщо ім'я файлу якось вбудовано в нього байт 00 або 2F, fsckслід це виправити.)
Вірніше, що у вас є назви файлів, які, на думку прикладного програмного забезпечення (Dolphin, ls), містять символи, які неможливо відобразити у вашому "локалі", тому це замінює їх символами-заповнювачами. Ви також не можете вводити ці символи, тому маніпулювати файлами складніше, але ви можете робити це до тих пір, як це зробите, не вводячи і копіюючи і не вставляючи ім'я. Наприклад, якщо ви видалите або перейменуєте проблемні файли безпосередньо з Dolphin, це повинно просто працювати (я б пішов так далеко, щоб сказати, що якщо він не працює, це помилка в Dolphin).
Якщо вам потрібно зробити щось із них із оболонки (наприклад, якщо вони належать rootі тому не можуть бути змінені програмою GUI), ви можете назвати їх побічно, використовуючи шаблони "glob", які будуть розширені до правильної послідовності (и) байтів і передано разом.
Тепер, звичайно, ви не хочете видаляти речі випадково, оскільки ваш глобальний зразок збігається занадто багато, тому моя рекомендація буде використовувати renameутиліту Perl для перетворення кожного імені файлу в його шістнадцяткове кодування:
$ rename '$_ = unpack("H*", $_)' *
Це не знищує жодної інформації - ні сам файл, ні будь-яке значення, можливо, спочатку не було закодовано в ім'я файлу до того, як воно було заблукало. Її можна скасувати для конкретних файлів, наприклад,
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
Обережно: є дві програми, названі renameрізного походження; вищезазначені команди працюватимуть лише з тим, що походить з Perl. В Ubuntu потрібний той, який ви хочете отримати з пакету "перейменувати", а не пакет "util-linux". rename -hрозрізнимо: це те, що ти хочеш ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... це не те, що ти хочеш ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
Ключове, на що слід звернути увагу, - «perlexpr». Можливо, у вас є старіша версія перейменування Perl, яка не розуміє всіх наведених вище варіантів, але команда, яку я показав, все одно повинна працювати.
Редагувати: Під 14.04 .5 сценарій perl, який включений rename, не підтримує перемикач -h. Ви можете підтвердити, що у вас є правильний, перевіривши його чоловічу сторінку, і man renameв цьому випадку верхній рядок буде містити:
RENAME (1) Посібник для програмістів Perl RENAME (1)