Initial commit
This commit is contained in:
commit
0cd1cbb132
7 changed files with 148 additions and 0 deletions
43
scripts/auto-snapclean-listener.sh
Normal file
43
scripts/auto-snapclean-listener.sh
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#!/bin/zsh
|
||||
set -euo pipefail
|
||||
|
||||
LOGF="/var/log/snapclean.log"
|
||||
log() { print -r -- "$(date '+%F %T') $*" >> "$LOGF"; }
|
||||
|
||||
is_running() {
|
||||
/usr/bin/tmutil status 2>/dev/null | /usr/bin/grep -Eq '"Running" = 1|Running = 1'
|
||||
}
|
||||
|
||||
wait_until_tm_idle() {
|
||||
local i=0
|
||||
while is_running; do
|
||||
sleep 2
|
||||
(( i++ ))
|
||||
[[ $i -gt 150 ]] && log "Timeout: TM still running. Waiting until it's finished." && break
|
||||
done
|
||||
}
|
||||
|
||||
delete_all_snapshots() {
|
||||
log "Deletes all local Snapshots at / …"
|
||||
/usr/bin/tmutil deletelocalsnapshots / || true
|
||||
log "Finished deleting."
|
||||
}
|
||||
|
||||
# Make sure logfile exists
|
||||
[[ -f "$LOGF" ]] || { sudo touch "$LOGF"; sudo chmod 644 "$LOGF"; }
|
||||
|
||||
while IFS= read -r line; do
|
||||
if print -r -- "$line" | /usr/bin/grep -q \
|
||||
"com.apple.TimeMachine:LocalSnapshotManagement] Created Time Machine local snapshot"; then
|
||||
log "Event erkannt: $line"
|
||||
# Short break until the snapshot is in index
|
||||
sleep 2
|
||||
# Waiting until TM is finished
|
||||
wait_until_tm_idle
|
||||
# delete all local snapshots
|
||||
delete_all_snapshots
|
||||
fi
|
||||
done < <(
|
||||
/usr/bin/log stream --style syslog --level info \
|
||||
--predicate 'process == "backupd" AND subsystem == "com.apple.TimeMachine"'
|
||||
)
|
||||
17
scripts/install.sh
Normal file
17
scripts/install.sh
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#!/bin/zsh
|
||||
set -euo pipefail
|
||||
|
||||
PLIST_SRC="$(cd -- "$(dirname "$0")/.." && pwd)/launchd/com.snapclean.listener.plist"
|
||||
SCRIPT_SRC="$(cd -- "$(dirname "$0")/.." && pwd)/scripts/auto-snapclean-listener.sh"
|
||||
|
||||
sudo install -m 0755 "$SCRIPT_SRC" /usr/local/bin/auto-snapclean-listener.sh
|
||||
sudo install -m 0644 "$PLIST_SRC" /Library/LaunchDaemons/com.snapclean.listener.plist
|
||||
sudo touch /var/log/snapclean.log /var/log/snapclean.out /var/log/snapclean.err
|
||||
sudo chmod 644 /var/log/snapclean.*
|
||||
|
||||
# (re)load
|
||||
sudo launchctl unload /Library/LaunchDaemons/com.snapclean.listener.plist 2>/dev/null || true
|
||||
sudo launchctl load -w /Library/LaunchDaemons/com.snapclean.listener.plist
|
||||
sudo launchctl list | grep snapclean || true
|
||||
|
||||
echo "✅ snapcleaner installed."
|
||||
6
scripts/uninstall.sh
Normal file
6
scripts/uninstall.sh
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/zsh
|
||||
set -euo pipefail
|
||||
sudo launchctl unload /Library/LaunchDaemons/com.snapclean.listener.plist 2>/dev/null || true
|
||||
sudo rm -f /Library/LaunchDaemons/com.snapclean.listener.plist
|
||||
sudo rm -f /usr/local/bin/auto-snapclean-listener.sh
|
||||
echo "✅ snapcleaner deleted. Logs stay in /var/log/snapclean.*"
|
||||
Loading…
Add table
Add a link
Reference in a new issue