Исключить список имен файлов при удалении файлов

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

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

1
06.10.2020, 08:14
1 ответ
#!/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.

1
18.03.2021, 23:00

Теги

Похожие вопросы