⚠️ ВНИМАНИЕ ⚠️
Эта статья содержит спойлеры к фильму Мстители: Война бесконечности. Если вы уже смотрели это видео или вас это не волнует, вы можете продолжить.
Грядущий фильм Мстители: Финал - один из самых ожидаемых фильмов 2019 года. Он положит конец сюжету Таноса и завершит войну, которую дразнят уже почти десять лет.
Предыдущий фильм, Мстители: Война бесконечности, представил Таноса и его поиски Камней бесконечности для достижения своей конечной цели: уничтожить половину разумных существ во вселенной.
Если вы смотрели фильм, значит, вы понимаете, о чем я говорю. Если вы этого не сделали, это все, что вам нужно знать, чтобы понять эту статью. Это статья не о фильме, поэтому мне просто нужно объяснить концепцию кода, чтобы он не выглядел глупо (все равно так). Танос злой (якобы), он собирает невероятную силу, а затем уничтожает половину людей (в том числе инопланетян) во вселенной. Почему? Рассуждения оставлю для фильма, он хороший, тебе стоит его посмотреть.
Пакет
Прежде чем я объясню код, вы можете попробовать его сами. Почему ты? Не знаю, но можно.
Для его запуска вам понадобятся nodejs и npm. Установите его как глобальную зависимость и запустите с помощью интерфейса командной строки.
Прежде чем мы продолжим, сделаем несколько шагов:
- Вы понимаете, что это навсегда удаляет ваши файлы. Не используйте его для конфиденциальной информации.
- Не используйте это.
- Перед запуском убедитесь, что вы находитесь в правильном каталоге, иначе вы потеряете кучу вещей.
- Серьезно, не используйте это.
- Вам следует использовать Linux или другую систему на базе Unix.
- СЕРЬЕЗНО, НЕ ДЕЛАЙТЕ ЭТО.
Если вы будете следовать этим правилам, все будет в порядке.
Код
Я использую функции ES6, но это не цель данной статьи. Если вы не понимаете синтаксис, оставьте комментарий, и я вам его объясню.
Код минимален и не использует никаких зависимостей. Что ж, я использовал две зависимости, чтобы заставить его работать как приложение CLI, но при удалении файла внешние зависимости не используются. Я не буду углубляться в параметры интерфейса командной строки, если вам интересно, проверьте страницу пакета npm.
Вы можете следить, используя страницу Github проекта, чтобы проверить код, как я объясню.
Я использую модуль child_process
из Node для создания дочерних процессов в ОС. Для этого я использую метод spawn
. Он принимает команду и список аргументов, а затем асинхронно запускает процесс, выполняющий команду.
Я запускаю find $path -type f
, который возвращает все имена файлов (с абсолютным путем) в каталоге $path
(по умолчанию это текущий каталог, который вызвал программу). В результате получается бинарный буфер, который читается с помощью модуля readline
. Этот модуль принимает читаемый поток двоичных данных и выводит каждую строку над слушателем в виде текста. Я беру каждую строку и помещаю ее в массив.
Используя прослушиватель result.on('exit')
, я разрешаю Promise, возвращая все имена файлов внутри массива.
Приведенный выше код является основной частью пакета, поскольку он извлекает все имена файлов. Осталось только удалить!
Точка входа в программу ниже:
Мы получаем все имена файлов из нашего процесса spawn.js и перемешиваем результат. Это гарантирует, что мы получим псевдо случайный порядок внутри массива. Мы просто отбрасываем половину файлов, а другую половину удаляем с диска с помощью модуля fs
.
После этого наш диск достиг истинного баланса. Ресурсов хватит на все уцелевшие файлы!
Идеально сбалансирован, как и должно быть. - Танос
Фактический пакет имеет некоторые дополнительные функции, такие как:
- Ведение журнала удаленных файлов;
- Возможность сохранить файлы git, чтобы вы могли отправить сбалансированный код в свое репо;
- Возможность исключить из удаления файлы, соответствующие RegEx, и
- Руководство по использованию
Тебе понравилось? Вы собираетесь им пользоваться? Не надо. Не знаю, зачем я это сделал.
Оставьте аплодисменты и подписывайтесь на меня для других подобных проектов.