Дубликат: https://superuser.com/questions/516417/how-to-restrict-ssh-port-forwarding-without-denying-it
Похоже, вы можете использовать следующее?
В конфигурационном файле сервера есть опция PermitOpen. Эта опция может быть использована для указания хостов и портов, для которых могут быть установлены переадресации. Эта опция может быть использована внутри блока Match, поэтому ее можно ограничить по пользователю, группе, имени хоста или IP-адресу.
Редактировать:
PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port
today="$( date +"%Y%m%d" )"
number=0
fname=$today.txt
while [ -e "$fname" ]; do
printf -v fname -- '%s-%02d.txt' "$today" "$(( ++number ))"
done
printf 'Will use "%s" as filename\n' "$fname"
touch "$fname"
сегодня
получает сегодняшнюю дату, и мы инициализируем наш счетчик, число
, равным нулю и создаем начальное имя файла в качестве даты с суффиксом .txt
.
Затем мы проверяем, существует ли уже имя файла. Если это так, увеличьте счетчик и создайте новое имя файла, используя printf
. Повторяйте до тех пор, пока не исчезнет конфликт имен файлов.
Строка формата для printf
, % s-% 02d.txt
означает «строку, за которой следует буквальное тире, за которым следует заполненное нулями двузначное целое число и строка .txt
". Строка и целое число передаются в качестве дополнительных аргументов printf
.
Двойное тире ( -
) необходимо перед строкой формата, чтобы не дать printf
интерпретировать тире в строке формата в качестве опции. . -v fname
помещает вывод printf
в переменную fname
.
Сенсорный
нужен только для тестирования.
Это сгенерирует такие имена файлов, как
20170125.txt
20170125-01.txt
20170125-02.txt
20170125-03.txt
и т. Д. при последующих запусках.
. Вы можете использовать seq
. Он может создавать числовые последовательности различными способами, однако вам необходимо знать общее количество файлов.
Например: вы можете попробовать seq -w 1 10
. Он создаст последовательность от 01
до 10
, затем вы можете включить ее в цикл for:
for i in `seq -w 1 10`
do
touch `date +%Y%m%d`-$i.txt
done
Дополнение к вашему последнему обновлению вопроса:
Чтобы выполнить то, что вы хотите легко, вы можете создать первый файл с -0
. При последующих запусках вам нужно взять список файлов, отсортировать
их, взять последний, вырезать
его из последнего -
и получить номер, увеличить его и создайте новый файл с этим номером.
Однако для заполнения нужно немного поработать.
Что-то вроде ...
#!/bin/bash
DATE=$(date +%Y%m%d)
filename="${DATE}.txt"
num=0
while [ -f $filename ]; do
num=$(( $num + 1 ))
filename="${DATE}-${num}.txt"
done
touch $filename
... должно сработать. Это создает имена файлов в формате DATE-1.txt, DATE-2.txt, DATE-3.txt, ..., DATE-10.txt, DATE-11.txt и т. Д. Изменение этого на DATE-01.txt etc оставлен в качестве упражнения для читателя :)
Обратите внимание, что вам, вероятно, также следует убедиться, что вы не вызываете сценарий более одного раза одновременно, иначе у вас будет более одного сценария, изменяющего что-то.
Примечание: существует множество программного обеспечения для управления несколькими версиями файла. Их называют «системами контроля версий» (VCS) или «управлением исходным кодом» (SCM). Git и subversion довольно популярны. Я предлагаю вам проверить их, а не заново реализовывать свои собственные: -)