Использование `find` для исключения нескольких путей, соответствующих шаблонам

Как упоминалось в комментариях и другом ответе, нет конкретного способа отправки нетегированных пакетов, принадлежащих определенной VLAN, потому что немаркированные пакеты не могут описать, какой VLAN они принадлежат из-за отсутствия тега. Как также упоминалось, родительский интерфейс (здесь eth1) будет отправлять непомеченные пакеты.

Однако это не означает, что немаркированные пакеты, отправленные из вашего Linux-сервера, не могут принадлежать определенной VLAN в вашей сети. Коммутатор должен назначить немаркированные пакеты, поступающие на данный порт, в конкретную VLAN. Обычно коммутаторы (которые поддерживают VLAN) по умолчанию назначают немаркированные пакеты «VLAN по умолчанию (1)». Однако, изменив конфигурацию на коммутаторе, вы можете дать ему указание помещать немаркированные пакеты, полученные в VLAN 10, и направлять их туда, где еще назначена VLAN 10.

Если для VLAN 10 задано тегирование на другом порту, те же самые пакеты будут выходить с тегами, если это место назначения пакета, и немаркированы на другом порту, который настроен как нетегированный для VLAN 10

{{1 }}
2
22.03.2019, 20:49
2 ответа

Если вы хотите удалить любой каталог с именем .gitили node_modulesиз дерева поиска, вы должны использовать

-type d \( -name.git -o -name node_modules \) -prune

Это приведет к тому, что findдаже не будет входить в эти каталоги (-type dне является строго необходимым, но я буду использовать его здесь для симметрии с -type f; см. ниже ).

Затем вы должны добавить другие условия,

-type d \( -name.git -o -name node_modules \) -prune -o \
-type f \( -name '*.yaml' -o -name '*.html' \) -print

Заканчивается

find. \
    -type d \( -name.git -o -name node_modules \) -prune -o \
    -type f \( -name '*.yaml' -o -name '*.html' \) -print

Любое действие, которое вы хотите выполнить с путями, прошедшее все тесты, должно выполняться вместо -print.

Обратите внимание, что логическая операция по умолчанию между двумя предикатами —-a(AND ).

7
27.01.2020, 21:53
man find

Отличное место для поиска дополнительной информации о find.

Это должно сработать.

find. \
    -type f \
    '(' -name '*.yaml' -or -name '*.html' ')' -and \
    -not '(' -path './.git/*' -or -path '*/node_modules/*' ')'

Обратите внимание на использование круглых скобок и необходимость заключать их в кавычки из-за того, что они встроены -в синтаксис bash (и большинства других оболочек ).

3
27.01.2020, 21:53

Теги

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