Обратный UDP-прокси с общедоступного IP-адреса на общедоступный IP-адрес

Эта функция bash выполняет перебор -принудительно findпо всем уровням каталогов под текущим каталогом в поисках именованного каталога.

cdd() {
  if [ "$#" -ne 1 ]
  then
    printf '%s: Error: one directory name expected\n' "${FUNCNAME[0]}" >&2
    return
  fi

  maxdepth=$(find. -type d -exec sh -c 'printf %s "$1" | LC_ALL=C tr -dc / | wc -c' findshell {} \; | sort -n | tail -1)
  for((i=1; i <= maxdepth; i++))
  do
    dir=$(find. -mindepth "$i" -maxdepth "$i" -type d -name "$1")
    if [ -n "$dir" ]
    then
        command cd -- "$dir"
        return
    fi
  done
  printf '%s: %s: no such directory found\n' "${FUNCNAME[0]}" "$1" >&2
}

Первая команда findвыполняет фрагмент оболочки для каждого каталога в текущем каталоге; фрагмент оболочки выводит имя каталога в конвейер trи wc, который удаляет каждый символ, не являющийся косой чертой -, а затем подсчитывает количество косых черт -. Я перенял этот трюк у ilkkachu и Stéphane Chazelas здесь . После вывода всех глубин каталога мы sort | tailнаходим наибольшее число. Это число является максимальной глубиной каталога, в которой нам нужно искать.

После этого выполняется цикл по find, ограниченный точно каждой глубиной каталога по очереди, начиная с текущего каталога до самого глубокого каталога. Если совпадение найдено, мы cdи выходим из функции. Если совпадений не найдено, мы выходим из цикла и выводим сообщение в stderr.

1
18.09.2021, 09:05
1 ответ

Проще всего это сделать через iptables . Какой порт вы должны перенаправить: здесь .

0
07.10.2021, 14:13

Теги

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