Просто используйте команду find
.
find. -type d ! \( -name "$(date -d "-7 days" +%Y%m%d)" \
$(eval printf "%s" "\" -o -name \
\$(date -d -"{6..0}"days +%Y%m%d)\"") -o -name. \) -exec rm -rf -- '{}' +
-type d
rm -rf -- '{}'
сразу+
Это зависит от того, что вы хотите сделать.
Если вам просто нужно временно заблокировать отключение питания во время выполнения какой-либо операции, см. systemd-inhibit
. Вы также можете заблокировать сон, приостановить и т. Д. Вот так. Вы также можете временно (пока ваша программа работает )сказать systemd игнорировать кнопку питания, чтобы вместо этого какая-то другая программа воздействовала на нее.
Если вы просто хотите запустить дополнительный код перед завершением работы, вы можете запустить службу с помощью poweroff.target
. Вы также можете рассмотреть shutdown.target
и reboot.target
. (Я думаю, вы также можете изменить poweroff.target
, чтобы не втягивать systemd-poweroff.service
, если вы хотите полностью изменить то, что делает кнопка питания, но будьте осторожны, такие вещи, как systemctl poweroff
и poweroff
, тоже проходят через это ).
Если вы хотите полностью отключить обработку systemd кнопки питания, вам сначала нужно знать, что на самом деле это делает logind. Параметр HandlePowerKey
в /etc/systemd/logind.conf
позволяет отключить его (, установив значениеignore
). Затем вы можете заставить другую программу прослушивать ключи.
Не совсем то решение, на которое я надеялся, но вот что я в итоге сделал:
Настройка
HandlePowerKey=ignore
в /etc/systemd/logind.conf удалена обработка ключа питания из systemd.
После этого вам остается обращаться с кнопкой питания, как с любой другой клавишей.
В моем случае я могу получить событие нажатия клавиши из
/dev/input/by-path/platform-r_gpio_keys-event
как описано в этом вопросе Доступ к ключам с устройства ввода Linux
Я создал модифицированную версию примера программы в связанном вопросе, чтобы дождаться моего ключа питания, который имеет код 116, а затем запустить мой сценарий.