В наши дни эти параметры вряд ли будут полезны, так как метод обхода, который они используют, широко опубликован, и почти все современные брандмауэры либо отбрасывают все фрагментированные пакеты, либо выполняют повторную сборку пакетов самостоятельно.
Предполагается, что фрагментация позволяет обойти брандмауэр путем разделения пакета на такие мелкие части, при которых брандмауэр не может идентифицировать каждую из них как использующую порт, который следует отклонить. Это работает только в том случае, если брандмауэр также разрешает весь неидентифицируемый трафик через (fail -open ).
#!/bin/bash
d="assets/img/fly"
f="_posts/2020-10-05-most-beautiful-story-i-ve-ever-heard.markdown"
find "$d" -type f -print0 |
grep -vzf <(grep -o "assets.*jpg" "$f") | xargs -0 echo rm --
Удалите echo
, если у вас все в порядке с тестированием. Также вам может потребоваться изменить путь к файлу уценки относительно того места, где вы его выполняете.
find
получит все файлы вашего каталога, -print0
передаст аргументы следующей команде, разделенные нулями, с сохранением имен файлов.
-z
заставляет grep
фильтровать эти аргументы как разделенные нулями, а не символами новой строки. -f
будет искать шаблоны первого файла в аргументах, а -v
исключит совпадающие аргументы.
Файл с шаблонами заменяется подстановкой процесса, работающей grep -o
и возвращающей полные имена файлов для исключения. Также xargs -0
рассматривает аргументы как разделенные нулем.
Вот вариант без сохранения имен файлов, при условии, что все ваши файлы такие же, как в примере:
#!/bin/bash
d="assets/img/fly"
f="_posts/2020-10-05-most-beautiful-story-i-ve-ever-heard.markdown"
find "$d" -type f | grep -vf <(grep -o "assets.*jpg" "$f") | xargs echo rm --
Примечание. :macOS GNU grep не поддерживает параметр -z
.