Удаление файлов с непечатными именами в Linux

Бывает такое, что, например, прислали с Windows-машины zip архив с русскими именами файлов. А zip с кодировками не знаком, правило в «чужой монастырь со своим уставом…» не слыхивал и вообще подозрительный тип, при распаковке в среде с другой локалью (говорят, что даже не другом Windows, если там по умолчанию не русская стоит, будут проблемы) получаем файлы с нечитаемыми названиями, а то ещё и в папке с таким же именем:

user@desktop: ~ $ ls
Работа  Документы  ??????  Список.zip

При попытке удалить наш вопросительный файл при помощи файлового менеджера получаем сообщение, что такого файла нет. А для удаления посредством rm надо как-то напечатать имя файла, которое состоит из непечатных символов. Как быть? Нужен какой-то универсальный идентификатор файлов и папок. И в *nix он есть, имя ему inode. Чтобы его узнать есть у ls ключик -i:

user@desktop: ~ $ ls -i
339 Работа  23987 Документы  40801 ??????  40790 Список.zip

Номер, стоящий слева от имени и есть inode файла. Теперь дело за малым, найти файл по этому номеру на диске, прочитать его точное имя и выгнать вон (в моём случае это папка с файлами, по этому rm -r):

user@desktop: ~ $ find . -inum 40801 -exec rm -r {} \;

Либо, если не хочется быть столь радикальными, можно попробовать переименовать:

user@desktop: ~ $ find . -inum 40801 -exec mv {} Список \;

Разберёмся в написаном:
find ищет файлы в указанной директории (точка «.» означает текущую директорию), по какому-то критерию, в данном случае указан -inum, значит ищем по inode. Как только файл нашелся, исполняем команду (-exec команда \;), передавая ей точное имя найденного файла при помощи {}.

Если там один файл, то можно сделать просто:

user@desktop: ~ $ find . -inum 40801 -delete

Удаление файлов с непечатными именами в Linux: 4 комментария

  1. Блин ну у луноходов вечно обычные пользовательские действия вызывают замыкание головного мозга 😀 Файлы такие удаляются с помощью mc без всяких извращений с консолью и аргумент «.» команде find чтобы искать файлы в текущей директории ставить не надо

    • Если есть один метод значит ли это что другие нужно уничтожить? Если есть карандаш зачем тогда шариковая ручка?
      Линукс тем и полезен что предоставляет обилие форм и методов работы на любой вкус.
      В системах автоматизации трудновато будет использовать mc.
      ps: Ух ты! настоящий тролль? А правда что вы без пищи можете впасть в спячку?

Добавить комментарий