Важливо розуміти, що це не такий тип «пошкодження файлової системи», який 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)