Как стать автором
Обновить

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

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

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

О некоторых таких скриптах решил попробовать писать сюда. Может, кому пригодятся (да и заточить под себя какой-нибудь из них всегда можно). Если нет — ругайтесь в комментариях, учту. Итак.

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


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

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

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

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

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

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

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

Для примера:

$ ds-findorphaned -v -r -R -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 (и подкаталогах, рекурсивно).

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

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

Прикручу ещё голосовалку, чтобы понять, стоит ли мне в дальнейшем писать о подобных полезностях.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Стоит ли мне в дальнейшем писать о подобных мелких полезностях?
80% Вообще, может, что полезное и попадётся. Пиши ещё о таких мелочах. 48
20% Нужно будет — наваяю сам. Не мусори своими поделиями на Хабре. 12
Проголосовали 60 пользователей. Воздержались 35 пользователей.
Теги:
Хабы:
+6
Комментарии 7
Комментарии Комментарии 7

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн