Создание символьной ссылки рекурсивно

Можно добавить другой ipset для блокирования, на этот раз типа hash:net, и добавьте 197.192.0.0/16 к этому ipset. Или замените свой ipset одним из типа hash:net с тех пор hash:net может сохранить IP-адреса также (сетевая маска 32).

Преобразовать из hash:ip кому: hash:net:

 ipset save myIpset > myIpset &&
   ipset destroy myIpset &&
   sed s/:ip/:net/ myIpset | ipset restore &&
   ipset add myIpset 197.192.0.0/16
7
07.10.2014, 20:37
4 ответа

Вы, вероятно, захотите использовать команду find, используя опцию maxdepth. Я создал этот пример структуры каталога:

/tmp/parent
/tmp/parent/subdir2
/tmp/parent/subdir1
/tmp/parent/subdir4
/tmp/parent/subdir4/notme
/tmp/parent/subdir3

Допустим, я хотел создать сим-ссылку на /tmp/hooks в каждом субдире, но не на notme subdir:

root@xxxxxxvlp12 ~ $ find /tmp/parent -type d -maxdepth 1 -exec ln -s /tmp/hooks {} \;
root@xxxxxxvlp12 ~ $ find /tmp/parent -ls
2490378    4 drwxr-xr-x   6 root     root         4096 Oct  7 12:39 /tmp/parent
2490382    4 drwxr-xr-x   2 root     root         4096 Oct  7 12:39 /tmp/parent/subdir2
2490394    0 lrwxrwxrwx   1 root     root           10 Oct  7 12:39 /tmp/parent/subdir2/hooks -> /tmp/hooks
2490379    4 drwxr-xr-x   2 root     root         4096 Oct  7 12:39 /tmp/parent/subdir1
2490395    0 lrwxrwxrwx   1 root     root           10 Oct  7 12:39 /tmp/parent/subdir1/hooks -> /tmp/hooks
2490389    4 drwxr-xr-x   3 root     root         4096 Oct  7 12:39 /tmp/parent/subdir4
2490390    4 drwxr-xr-x   2 root     root         4096 Oct  7 12:38 /tmp/parent/subdir4/notme
2490396    0 lrwxrwxrwx   1 root     root           10 Oct  7 12:39 /tmp/parent/subdir4/hooks -> /tmp/hooks
2490387    4 drwxr-xr-x   2 root     root         4096 Oct  7 12:39 /tmp/parent/subdir3
2490397    0 lrwxrwxrwx   1 root     root           10 Oct  7 12:39 /tmp/parent/subdir3/hooks -> /tmp/hooks
2490391    0 lrwxrwxrwx   1 root     root           10 Oct  7 12:39 /tmp/parent/hooks -> /tmp/hooks
6
27.01.2020, 20:16

После оглядывания и воспроизведения с командой «Найти», я обнаружил, что было проще просто петлю над вещами, использующими ./*/ . Спасибо за помощь! Я сделал сценарий на моей учетной записи GitHub, который гораздо более тонко настроен. Хотя это ущерб GitLab. Это займет всего несколько минут, чтобы изменить его только для того, что вам нужно https://github.com/michaeljs1990/bash-scripts/blob/master/gitlab-hooks-migration.sh Отказ

#!/bin/bash

find . -name "hooks" -type l -delete

hooks="hooks"
for i in ./*/; do
    ln -s  /opt/gitlab/embedded/service/gitlab-shell/hooks/ $i$hooks
done
2
27.01.2020, 20:16

LN работает как CP . Если есть более двух аргументов, последний лечится как каталог.

Из MAN LN :

ln [option]... target... directory

Вместо этого вам нужно использовать для цикла.

2
27.01.2020, 20:16

Найти Может использоваться для выполнения команды в контексте каждого каталога под определенным путем.

Следующая команда ищет все файлы под / var / opt / gitlab / git-data / opositories / web / , которые являются каталогами ( -Type d ) и создают символическое Ссылка относительно текущего каталога оно рассматривается (представлено {} в -EXEC )

, поэтому следующее Find команда будет делать то, что вам нужно:

find /var/opt/gitlab/git-data/repositories/web/ -type d -exec ln /opt/gitlab/embedded/service/gitlab-shell/hooks/ {}/hooks \;
3
27.01.2020, 20:16

Теги

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