Vidir: ещё один способ переименования файлов

/ Просмотров: 1819
Метки: ,

только для vim-юзеров!

В пакете moreutils среди полутора десятков нужных (и не очень) утилит есть одна замечательная тулза, прямо-таки алмаз в кучке гальки. Но всю ее прелесть могут оценить только те, кто владеет могучим редактором vim.

Автор этого написанного на perl инструмента объясняет кратко: "vidir - edit directory". На самом деле vidir, запущенный в какой-либо директории, выводит ее листинг в виме, где мы и можем его править как обычный файл. Вот, например, я запустил vidir в своей директории ~/Temp (у меня там две поддиректории и четыре файла):

1 1 ./ComposeKeys.html
2 2 ./Fonts
3 3 ./HTML 5_1.html
4 4 ./a
5 5 ./info
6 6 ./Лист_в_клетку.odt

(Дублирование нумерации происходит потому, что у меня в ~/.vimrc прописано set number; vim-юзеры знают, что это временно можно отключить в открытом виме командой :se nonumber)

Vidir работает по "неразрушающему" принципу, т.е. подобно команде sudoedit (более правильной, чем, скажем, sudo vim), создает временный промежуточный файл в системной директории /tmp, что можно видеть в статусной строке вима. И только после сохранения записывает изменения в реальных именах, а временный файл удаляет.

На представленном выше листинге видны как достоинства, так и недостатки этого инструмента (из-за последних я и не называю его бриллиантом, а всего лишь алмазом smile)

Достоинства.

Представим себе кучу музыкальных, или графических, или каких угодно файлов, в названиях которых виндоюзеры, дай бог им здоровья, по своей виндовой привычке оставили массу всякого мусора: знаки препинания, кавычки, скобки, пробелы... В виме всё это убирается элементарно, несколькими (а иногда и одной) командами типа

:%s/, /_/g

(заменяет все запятые с последующим пробелом на подчёркивание).

Нечего уже говорить о массовом изменении расширений, например, так:

:%s/png$/jpeg/g

Громадное преимущество vidir перед shell- или sed-скриптами состоит в том, что все стадии процесса и результат находятся у нас перед глазами, и мы можем, используя мощный редакторский арсенал вима (включая возможность использовать в его командах shell-, awk- и sed-скрипты), корректировать или отменять правку на лету до сохранения результата. Можно даже удалять файлы, удалив строки с их именем. Правда, нельзя впрямую удалять непустые вложенные директории (пустые можно) — vim покажет, что изменения якобы сохранены, но непустой каталог как был, так и останется, о чём нам сообщит терминал. Однако можно с помощью команды find | vidir - заставить утилиту развернуть все вложенные директории, и удалять файлы и директории поочередно.

Способы вызова vidir описаны в коротеньком мане. Кроме уже упомянутых, есть возможность работать только с определенными файлами (например, vidir *.jpeg) или вообще только с файлами, не трогая поддиректорий (find -type f | vidir -) либо наоборот (find -type d | vidir -).

Недостатки.

Увы, они не менее очевидны, чем достоинства. Главных два:

во-1-х, как видно в приведенном мной примере, vidir никак не различает файлы и каталоги. Я не программист, но мне представляется, что организовать хотя бы простейшее различение (подсветкой) не должно было представлять особой сложности;

во-2-х, вот этот "передний аппендикс", включающий нумерацию (совершенно ненужную, поскольку ее легче легкого включить/выключить в виме) плюс табуляция плюс конструкция ./ перед "значащим" именем файла несколько сбивает с толку и требует определенной осмотрительности в правке, и в особенности в применении регулярных выражений. Чтобы понять, как ведет себя vidir в случае вмешательства "куда не надо", попробуем удалить всё "лишнее" перед именем файла info:

1 1 ./ComposeKeys.html
2 2 ./Fonts
3 3 ./HTML 5_1.html
4 4 ./a
5 info
6 6 ./Лист_в_клетку.odt

Сохраняемся (:w), вим пишет что "записано", но закрыв его, видим в терминале сообщение:

/usr/bin/vidir: unable to parse line "info", aborting

а файл info остается, даже если мы пытались назвать его как-то иначе.

И всё-таки достоинства этого маленького инструмента, имхо, перевешивают недостатки, и в некоторых случаях он кажется мне уже незаменимым.

Оставьте комментарий

Комментарий будет опубликован после проверки

(обязательно)