Как сопоставить имя файла, указав подстроку префикса?

ddclient

Самый простой способ - использовать ddclient. Я использую его на своем сервере в сочетании с бесплатным сервером доменных имен, например dynu.com.

В ссылке есть больше документации, но ddclient опрашивает динамический IP-адрес вашего клиента. Когда он меняется, он отправляет новый адрес на dynu.com (например). У вас будет учетная запись на dynu.com, где вы укажете свое пользовательское доменное имя. Затем вы можете напрямую подключиться к http://yourname.dynu.com, который перенаправляет на IP вашего клиента.

Преимущество использования числового IP-адреса в том, что вам не нужно постоянно обновлять конфигурацию ssh, а можно просто подключиться напрямую к доменному имени. Это очень хорошо работает на моем сервере.

Числовой IP-адрес

В качестве альтернативы, если вы не хотите использовать этот способ и предпочитаете публиковать числовой IP-адрес где-нибудь, вот старый скрипт, который я использовал. Он использует внешнюю веб-страницу для поиска вашего локального IP, что является единственным простым способом сделать это. Затем он отправляет почту bar@email.com, но вы можете изменить это под свои нужды. Вы можете запустить это как задание cron.

#!/usr/bin/env bash

CURRENTIP=$(curl -s http://myip.dnsomatic.com)
# Alternatively, use http://icanhazip.com

if echo $CURRENTIP | grep -qE '^([0-9]{1,3}\.){3}[0-9]{1,3}$' ; then
  if ! cmp --quiet <(echo $CURRENTIP) /home/pi/.myipaddress ; then
    echo "IP address changed to ${CURRENTIP}"
    echo $CURRENTIP > /home/foo/.myipaddress
    echo -e "Foo's IP address has changed to ${CURRENTIP} .\n" | mail -s 'Change of IP address' bar@email.com
  fi
  else
    echo "ERROR: IP address enquiry returns ${CURRENTIP}"
fi
1
26.10.2018, 04:53
2 ответа

Похоже, вам нужны фигурные -скобки:

scp my-machine:/home/user/a-folder/{massif,callgrind}*.

В противном случае вы сопоставляете отдельные символы, а не две полные строки.

bashвыполняет ряд различных типов расширения и замены; они задокументированы на справочной странице bash -для поиска раздела EXPANSION. Здесь тип [рассматривается в разделе «Расширение пути» (, он соответствует путям )и {в разделе «Расширение фигурной скобки» (, он генерирует несколько аргументов из предоставленных параметров, независимо от присутствующих файлов ).

1
27.01.2020, 23:31

Файлы могут выбираться двумя способами. :шаблоны могут указываться последовательно или последовательно.

Первый метод

Этот метод требует использования расширенного шаблона Bash для указания нескольких шаблонов вместе. Пользователь должен включить опцию оболочки extglobс помощью встроенного shopt(c.f.shoptвстроенный ), поскольку расширенные шаблоны Bash по умолчанию не включены.

prompt% scp username@hostname:"/home/user/dirname/@(foo|bar)*".

Шаблон Bash sub -@(PATTERN-LIST)позволяет указать список из одного или нескольких шаблонов, разделенных |. Он соответствует одному из заданных шаблонов. Например, @(foo|bar)соответствует fooили bar, но не соответствует foobar, barfoo, foofoo, barbar.

Звезда шара соответствует любой строке символов, включая пустую строку. Таким образом, шаблон @(foo|bar)*соответствует всем именам файлов, которые начинаются с префикса fooилиbar((вложенной строки )).

Этот метод работает, когда удаленной оболочкой является Bash и ее опция оболочки extglobвключена. Пользователь может включить эту опцию Bash в своем файле конфигурации (, например.~/.bash_profile)на удаленной машине.

Второй метод

Этот метод выполняет одну и ту же команду с разными аргументами несколько раз. Он работает с использованием оболочки, совместимой с POSIX.

for prefix in foo bar
do
    scp username@hostname:"/home/user/dirname/${prefix}*".
done

Расширение раскоса

Этот метод ненадежен, поскольку в результирующем выражении могут указываться несуществующие имена файлов.

1
27.01.2020, 23:31

Теги

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