Для GNU find
и других реализаций, поддерживающих -execdir
:
find dir1 dir2 dir3 -type d -execdir test -d '.git' \; -print -prune
(см. комментарии)
.git
достаточноfind dir1 dir2 dir3 -type d -path '*/.git' -print -prune | xargs -I {} dirname {}
Если -printf '%h'
поддерживается (как в случае find
от GNU), нам не нужно dirname
:
find dir1 dir2 dir3 -type d -path '*/.git' -printf '%h\n' -prune
Как только он встретит папку .git
по текущему пути, он выведет ее, а затем перестанет искать дальше вниз по поддереву.
.git
найденИспользуя -quit
, если ваш find
поддерживает это:
for d in dir1 dir2 dir3; do
find "$d" -type d -name .git -print -quit
done | xargs -I {} dirname {}
(Согласно этой подробной публикации Стефана Шазела-quit
поддерживается в GNU и FreeBSD find
и в NetBSD как -exit
.)
Снова с -printf '%h'
, если поддерживается:
for d in dir1 dir2 dir3; do
find "$d" -type d -name .git -printf '%h\n' -quit
done
.git
См. ]"Возможное решение"для текущего решения этой конкретной проблемы.
(О, и очевидно, что решения, использующие xargs
, предполагают, что в путях нет новых строк, иначе вам понадобится магия нулевого байта.)
Вы можете редактировать свои правила напрямую. Найдите, где хранятся ваши правила - это может отличаться в зависимости от версии ОС.
Я использую Ubuntu 16.04; мои правила находятся в /etc/ufw/user.rules. Некоторые старые версии Debian хранят файлы в /lib/ufw/user.rules, поэтому проверьте и там.
После редактирования файла выполните sudo ufw reload
, чтобы перезагрузить правила.
Затем выполните sudo ufw status
, чтобы подтвердить, что ваши новые правила были включены.