Простенький скрипт поиска возможно осиротевших файлов проекта

в 18:41, , рубрики: perl, полезные мелочи, Программирование, Разработка под Linux, скрипты

Леность ли моя тому причиной или болезненная неприязнь к комбайнам, но у меня как-то не сложились отношения с большими толстыми довольными IDE. Довольствуюсь простым ламповым Geany и несколькими самописными скриптами, количество коих растёт по мере необходимости.

С одной стороны, минусы очевидны — все эти скрипты часто повторяют функционал больших сред разработки; велосипеды — в массы. Но с другой стороны, я получаю ровно то, что нужно и удобно мне. Да и, потом, юниксвейненько получается: понадобилось забить гвозь — берёшь молоток, а не нанимаешь строительный кран с бригадой рабочих и прорабом.
Простенький скрипт поиска возможно осиротевших файлов проекта - 1
О некоторых таких скриптах решил попробовать писать сюда. Может, кому пригодятся (да и заточить под себя какой-нибудь из них всегда можно). Если нет — ругайтесь в комментариях, учту. Итак.

Поиск сирот (ds-findorphaned)

При работе над более-менее большими проектами, какими бы мы педантами не были, порой скапливается приличное количество файлового мусора. Картинки, CSS-ки, временные версии. Разумеется всё это нужно организовывать тем или иным способом — названиями, метками, расположением — как угодно. Но в пылу творчества о чём-нибудь да забудешь. Оно и весит, вроде как, немного, но… неаккуратно. Порой хочется почистить проект, а для этого нужно ещё этот мусор отыскать среди другого мусора нужных файлов.

Одним из признаков нужности файла является его упоминание в других файлах. В других нужных файлах. Всяческие инклюды, пути к картинкам в CSS-ках и т. п. Сразу нужно оговориться, что это далеко не единственный признак. Во-первых, нужный файл может в других не упоминаться. Во-вторых, может упоминаться в других, но эти другие не нужны сами. Но. Всё-таки, если файл больше нигде не упоминается, имеет смысл обратить на него внимание.

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

  • -d — Каталог с файлами, которые хочется проверить на сиротство. Отдельным ключом -r задаётся рекурсивный поиск в этом каталоге.
  • -f — Маска (регулярное выражение) имён файлов, которые хочется проверить на сиротство.
  • -D — Каталог с файлами в которых ищется упоминание заданных выше возможно сиротских файлов. Ещё одним отдельным ключом -R задаётся рекурсивный поиск в этом каталоге.
  • -F — Маска (регулярное выражение) имён файлов, в которых ищется упоминание заданных выше возможно сиротских файлов.

Ну и три вспомогательных ключа:

  • -p — Способ выдачи результата обычным списком в консоль, по строке на файл. Без ключа дополнительно выводится суммирующая информация и предложение эти файлы удалить.
  • -e — С этим ключом можно указать конкретную кодировку анализируемых файлов на случай, если с этим не справится “Enca” (что вряд ли), включающаяся в работу по умолчанию, если этот ключ не указан.
  • -l — Запись результатов поиска в указанный этим ключом лог-файл.

Разумеется, каталоги для поиска и маски имён могут пересекаться вплоть до полного совпадения. По умолчанию, кстати, если эти ключи не заданы, оба каталога принимаются за текущий (./) и обе маски означают любые имена (.*). Рекурсивность поиска же при этом по умолчанию выключена, чтобы не взорвать диск и мозг компьютера на больших проектах.

Для примера:

$ ds-findorphaned -prR -l "~/log.txt" -d "~/maybe_orphaned_images" -f ".*.jpg$" -D "~/search_here, ~/and_here" -F ".*.php$"

Результатом будет список всех .jpg-файлов, находящихся в ~/maybe_orphaned_images (и подкаталогах, рекурсивно), не упоминающихся ни в одном из .php-файлов, находящихся в ~/search_here и ~/and_here (и подкаталогах, рекурсивно).

Я сам обычно запускаю скрипт с ключами -p и -l, чтобы потом открыть лог, просмотреть, удалить строки с заведомо нужными файлами и скормить оставшееся rm-у или mv.

И ещё раз. Неупоминание — лишь один из признаков ненужности файла, так что скрипт — лишь вспомогательный инструмент для принятия решения. Но по мне так инструмент полезный.

Прикручу ещё голосовалку, чтобы понять, стоит ли мне в дальнейшем писать о подобных полезностях.

Автор: Assador

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js