⚠️ ВНИМАНИЕ ⚠️

Эта статья содержит спойлеры к фильму Мстители: Война бесконечности. Если вы уже смотрели это видео или вас это не волнует, вы можете продолжить.

Грядущий фильм Мстители: Финал - один из самых ожидаемых фильмов 2019 года. Он положит конец сюжету Таноса и завершит войну, которую дразнят уже почти десять лет.

Предыдущий фильм, Мстители: Война бесконечности, представил Таноса и его поиски Камней бесконечности для достижения своей конечной цели: уничтожить половину разумных существ во вселенной.

Если вы смотрели фильм, значит, вы понимаете, о чем я говорю. Если вы этого не сделали, это все, что вам нужно знать, чтобы понять эту статью. Это статья не о фильме, поэтому мне просто нужно объяснить концепцию кода, чтобы он не выглядел глупо (все равно так). Танос злой (якобы), он собирает невероятную силу, а затем уничтожает половину людей (в том числе инопланетян) во вселенной. Почему? Рассуждения оставлю для фильма, он хороший, тебе стоит его посмотреть.

Пакет

Прежде чем я объясню код, вы можете попробовать его сами. Почему ты? Не знаю, но можно.

Для его запуска вам понадобятся nodejs и npm. Установите его как глобальную зависимость и запустите с помощью интерфейса командной строки.



Прежде чем мы продолжим, сделаем несколько шагов:

  1. Вы понимаете, что это навсегда удаляет ваши файлы. Не используйте его для конфиденциальной информации.
  2. Не используйте это.
  3. Перед запуском убедитесь, что вы находитесь в правильном каталоге, иначе вы потеряете кучу вещей.
  4. Серьезно, не используйте это.
  5. Вам следует использовать Linux или другую систему на базе Unix.
  6. СЕРЬЕЗНО, НЕ ДЕЛАЙТЕ ЭТО.

Если вы будете следовать этим правилам, все будет в порядке.

Код

Я использую функции ES6, но это не цель данной статьи. Если вы не понимаете синтаксис, оставьте комментарий, и я вам его объясню.

Код минимален и не использует никаких зависимостей. Что ж, я использовал две зависимости, чтобы заставить его работать как приложение CLI, но при удалении файла внешние зависимости не используются. Я не буду углубляться в параметры интерфейса командной строки, если вам интересно, проверьте страницу пакета npm.

Вы можете следить, используя страницу Github проекта, чтобы проверить код, как я объясню.

Я использую модуль child_process из Node для создания дочерних процессов в ОС. Для этого я использую метод spawn. Он принимает команду и список аргументов, а затем асинхронно запускает процесс, выполняющий команду.

Я запускаю find $path -type f, который возвращает все имена файлов (с абсолютным путем) в каталоге $path (по умолчанию это текущий каталог, который вызвал программу). В результате получается бинарный буфер, который читается с помощью модуля readline. Этот модуль принимает читаемый поток двоичных данных и выводит каждую строку над слушателем в виде текста. Я беру каждую строку и помещаю ее в массив.

Используя прослушиватель result.on('exit'), я разрешаю Promise, возвращая все имена файлов внутри массива.

Приведенный выше код является основной частью пакета, поскольку он извлекает все имена файлов. Осталось только удалить!

Точка входа в программу ниже:

Мы получаем все имена файлов из нашего процесса spawn.js и перемешиваем результат. Это гарантирует, что мы получим псевдо случайный порядок внутри массива. Мы просто отбрасываем половину файлов, а другую половину удаляем с диска с помощью модуля fs.

После этого наш диск достиг истинного баланса. Ресурсов хватит на все уцелевшие файлы!

Идеально сбалансирован, как и должно быть. - Танос

Фактический пакет имеет некоторые дополнительные функции, такие как:

  • Ведение журнала удаленных файлов;
  • Возможность сохранить файлы git, чтобы вы могли отправить сбалансированный код в свое репо;
  • Возможность исключить из удаления файлы, соответствующие RegEx, и
  • Руководство по использованию

Тебе понравилось? Вы собираетесь им пользоваться? Не надо. Не знаю, зачем я это сделал.

Оставьте аплодисменты и подписывайтесь на меня для других подобных проектов.