Проблема связана с комбинацией первой строки сценария и самой команды rsync
. Давайте посмотрим ...
Команда find / backup / staging / -mtime +7 -exec rm -rf {} \;
удаляет все файлы и целые деревья каталогов где файл или корень дерева каталогов не изменялся в течение как минимум семи дней.
Вы также используете rsync -a ...
, который копирует файлы и каталоги во время модификации.
В результате ваша находка
сопоставит и удалит файлы и деревья каталогов, которые были созданы не менее семи дней назад. Обычно это системные файлы, такие как / bin / ls
и почти наверняка сам /
. Вы можете проверить с помощью ls -ld /
и подтвердить, что отображаемая дата изменения больше недели назад.
Одним из решений может быть использование rsnapshot
, который очень хорошо управляет синхронизированным и датированным резервным копированием. Другой вариант - использовать rsync -a ...--delete
, но в целом я бы рекомендовал rsnapshot
.
Если вы действительно хотите развернуть собственное решение, рассмотрите что-то вроде этой пары команд:
find /backup/staging -mtime +7 \! -type d -delete
find /backup/staging -depth -type d -exec rmdir {} + 2>/dev/null
Это удалит все не каталоги (например, файлы, узлы устройств и т. Д.), Которые старше семи дней, а затем удалить все пустые каталоги.
Я обнаружил, что самым простым способом является сценарий оболочки, который запускается при запуске. Это должно работать независимо от -используемой экранной заставки (, если таковая имеется ).
#!/bin/bash
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint --line-buffered |
while read line
do
case "$line" in
*"<true>"*)
amixer -q -D pulse sset Master off
;;
*"<false>"*)
amixer -q -D pulse sset Master on
;;
esac
done
Запустить этот скрипт (или настроить автозапуск этого скрипта при входе в систему):
#!/bin/bash -euET
{
set -o pipefail
export DBUS_SESSION_BUS_ADDRESS="${DBUS_SESSION_BUS_ADDRESS:-unix:path=/run/user/$(id -u)/bus}"
export DISPLAY="${DISPLAY:-:0}"
xscreensaver-command -watch | while read -r line ; do
echo "handling event: $line"
if [[ $line = LOCK* ]]; then
volume=$(pamixer --get-volume)
echo "current volume is $volume"
pamixer --set-volume 0
fi
if [[ $line = UNBLANK* ]]; then
echo "setting volume to $volume"
pamixer --set-volume "$volume"
fi
done
exit
}
Объяснение:"демон" часть этого скрипта xscreensaver-command -watch
будет зависать и ждать каких-либо событий от xscreensaver. Всякий раз, когда происходит событие "LOCK" или "UNBLANK", громкость звука обнуляется и восстанавливается соответственно.