Вы могли бы сделать это в два шага, сначала переместив файлы, а затем удалив теперь пустой родительский каталог:
mkdir -p to/there
mv from/here/* to/there
rmdir from/here
В вашем конкретном случае фрагмент
if [[ "$stringOldDir" == "$stringNewDir" ]] ; then
echo "Match strings "$stringOldDir" and "$stringNewDir""
if [[ ! -d "move_to" ]] ; then
mkdir -v "$move_to"
mv -vf "$OldDirName" "$move_to"
else
mv -fv "$OldDirName" "$move_to"
fi
fi
может быть заменен примерно так:
mkdir -p "$move_to/$OldDirName"
mv "$OldDirName"/* "$move_to/$OldDirName"
rmdir "$move_to/$OldDirName"
-121--209516-
Как я уже прокомментировал, ваше первое расширение ничего не делает. Строка литерала («»)
отсутствует в последовательности, поэтому ничего не удаляется. Затем второе расширение удаляет все символы, которые не являются буквой или космосом. Вот почему «CD» остается. В вашем коде нет ничего, что могло бы понизить регистр «d» в «CD».
Если вы хотите удалить все биты в скобках:
shopt -s extglob
NewDirectoryName='Dio - We Rock-Greatest Hits (2CD) (2004)'
NewDirectoryName=${NewDirectoryName//\(*([^\)])\)}
# ...................................aa........cc
# .....................................bbbbbbbb
# (a) a literal open parenthesis
# (b) zero or more non-close-parenthesis characters
# (c) a literal close parenthesis
echo ">$NewDirectoryName<"
>Dio - We Rock-Greatest Hits <
Для удаления последнего пробела:
NewDirectoryName=${NewDirectoryName%%+([[:blank:]])}
Используются узоры «расширенного сопоставления образцов», задокументированные в конце этого раздела руководства: https://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching
-121--105114-
У вас нет сертификатов, где их ожидает git. На тот же вопрос был дан ответ здесь .
Я не знаю ни одного решения systemd, но вы можете эффективно отслеживать изменения в интерфейсах с помощью ip monitor
и направлять вывод в сценарий, который ищет интересующие вас изменения. Например, если я сделаю
$ ip monitor address dev enp3s0
затем добавьте новый псевдоним к интерфейсу enp3s0. Я получаю строку
2: enp3s0 inet 192.168.77.77/24 brd 192.168.77.255 scope global enp3s0:1
valid_lft forever preferred_lft forever
Я предполагаю, что вы увидите нечто подобное для изменений DHCP.
Если вы предпочитаете, вы можете написать программу на C, чтобы сделать то же самое, см. этот ipevent.c .
Взгляните на сетевой -диспетчер. Это демон, запускающий сценарии из /etc/networkd-dispatcher/*.d
при различных сетевых событиях. Сведения о событиях передаются сценариям через переменные среды.
Многие пакеты не работают с systemd-networkd
... пока.(см. отчет об ошибках на LaunchPad)
На данный момент DHCP-клиент ISC(dhclient
)по-прежнему безраздельно господствует, особенно в пользовательском DHCP -Опция, необходимая DHCP-серверам многих интернет-провайдеров (Я смотрю на вас, Juniper Networks ), а также на поддержку Скрипты ОС -.
Итак, перейдите к /etc/systemd/network
, чтобы отредактировать файл конфигурации, связанный с динамической IP-адресацией, и отключить DHCP systemd в следующем:
[Match]
Name=eth1
[Network]
# Using ISC DHCP client (dhclient) instead of systemd-networkd
# Better support of DHCP-Options and OS-specific script supports
DHCP=no
Затем убедитесь, что для клиента ISC DHCP(dhclient
)в/etc/network/interfaces
:
auto eth0
iface eth0 inet dhcp
И для/etc/dhcp/dhclient.conf
:
send host-name "Wireless_Broadband_Router";
send domain-name "home";
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, time-servers, log-servers,
default-ip-ttl, dhcp-requested-address, dhcp-lease-time,
dhcp-server-identifier,dhcp-parameter-request-list,
vendor-class-identifier,dhcp-client-identifier,
www-server,
dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn,
dhcp6.sntp-servers,
interface-mtu,
ntp-servers;
Последним шагом является запуск systemd DHCP-клиента ISC в качестве демона. Создайте файл в /etc/systemd/system/dhclient@.service
.
# cat /etc/systemd/system/dhclient@.service
[Unit]
Description=dhclient on %I
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
[Service]
# ExecStart=/sbin/dhclient -4 -q %I
ExecStart=/sbin/dhclient -4 -v -pf /run/dhclient.%I.pid -lf /var/lib/dhcp/dhclient.%I.leases %I
[Install]
WantedBy=multi-user.target
И сделать DHCP-клиент ISC доступным для демона systemd
путем запуска из оболочки:
sudo systemctl daemon-reload #makes the dhclient@.service available
sudo systemctl enable dhclient@eth0.service
sudo systemctl start dhclient@eth0.service
Можно использовать для еще более детального контроля над тем, когда вы хотите, чтобы ваш скрипт выполнялся.
В зависимости от того, в каком состоянии должен выполняться ваш скрипт, вам нужно решить, в какую папку поместить ваш скрипт.
Мы будем использовать папку routable.d
, когда для ссылки настроены оператор связи и маршрутизируемый адрес .
Скопируйте файл сценария в/usr/lib/networkd-dispatcher/routable.d
cp path/to/my/ipchange_script.sh /usr/lib/networkd-dispatcher/routable.d
#!/bin/bash
if [[ $IFACE == "eth0" && $AdministrativeState == "configured" ]]; then
echo "IP Address has changed to: $ADDR" >> /tmp/iplog.txt
fi
exit 0
Обновите свой IP-адрес (dhclient -r eth0 && dhclient -v eth0
), затем, чтобы увидеть вывод вашего скрипта или увидеть, есть ли в вашем скрипте какие-либо ошибки, которые вы можете проверить с помощью команды:
sudo service networkd-dispatcher status
П.С. Я искал несколько месяцев, и нигде не было примеров того, как работать с networkd-dispatcher
. Только сегодня смог разобраться. Наслаждаться!
Использовать NetworkManager
Мне не удалось заставить networkd-dispatcher
реагировать на изменения dhcp в Ubuntu Server 20.04, но NetworkManager (, который заменил systemd-networkd
в Ubuntu Desktop ), может.
sudo apt install network-manager
Отредактируйте файл конфигурации в/etc/netplan/
:
network:
version: 2
renderer: NetworkManager
sudo netplan generate
для создания файлов конфигурации для NetworkManager
systemd-networkd
и перезагрузить sudo systemctl mask systemd-networkd
sudo reboot now
/etc/NetworkManager/dispatcher.d
NetworkManager запустит его с $1 = интерфейс, $2 = действие (для, например, dhcp-change
,up
)и установит некоторые переменные среды. См. его руководствоhttps://developer.gnome.org/NetworkManager/stable/NetworkManager.html