fix: odstranit emoji ze vsech souboru

Kompletne odstraneno:
- Emoji (smajliky, symboly, boxes, arrows) z README
- Emoji ze skriptu (sipky, symboly)
- Emoji z docker-compose (adresare)

Nahrano za:
- Textove alternativy (sipky -> '->', boxes -> '+', atd.)
- ASCII pouze kde to slo

Ciste vsechny 7 repo (overeno Python skriptem).
This commit is contained in:
2026-08-02 08:50:11 +02:00
parent 09d5ccb4b1
commit 10d214c2a2
7 changed files with 771 additions and 771 deletions
+42 -42
View File
@@ -3,11 +3,11 @@
Bash skripty pro správu Dockeru na Macu i Linuxu. Bash skripty pro správu Dockeru na Macu i Linuxu.
Jedná se o **přesné kopie** skriptů z tvého lokálního `~/Skripty/docker-domov/`. Jedná se o **přesné kopie** skriptů z tvého lokálního `~/Skripty/docker-domov/`.
> **Jsi začátečník?** Čti od [Začínáme](#zaciname) vše je krok za krokem. > **Jsi začátečník?** Čti od [Začínáme](#zaciname) - vše je krok za krokem.
--- ---
## 📦 Co tu je ## Co tu je
| Skript | Alias | Co dělá | | Skript | Alias | Co dělá |
|---|---|---| |---|---|---|
@@ -17,13 +17,13 @@ Jedná se o **přesné kopie** skriptů z tvého lokálního `~/Skripty/docker-d
| `docker-restore.sh` | `dk-restore` | Obnovuje Docker projekty ze zálohy | | `docker-restore.sh` | `dk-restore` | Obnovuje Docker projekty ze zálohy |
| `disk-watch.sh` | `dk-watch` | Sleduje volné místo na Docker datech | | `disk-watch.sh` | `dk-watch` | Sleduje volné místo na Docker datech |
| `mount-nas.sh` | `dk-nas` | Připojí/odpojí NAS SMB share do `/Volumes/<ssd-data-mount>/multimedia` | | `mount-nas.sh` | `dk-nas` | Připojí/odpojí NAS SMB share do `/Volumes/<ssd-data-mount>/multimedia` |
| `update-macos.sh` | | Aktualizace macOS přes Software Update | | `update-macos.sh` | - | Aktualizace macOS přes Software Update |
Všechny skripty jsou **idempotentní** (můžeš spustit víckrát), mají `--help`, podporují **dry-run** a bez potvrzení nic destruktivního neprovádějí. Všechny skripty jsou **idempotentní** (můžeš spustit víckrát), mají `--help`, podporují **dry-run** a bez potvrzení nic destruktivního neprovádějí.
--- ---
## 🚀 Začínáme ## Začínáme
### Krok 1: Naklonuj repo ### Krok 1: Naklonuj repo
@@ -73,14 +73,14 @@ Příklad struktury:
``` ```
~/DockerProjects/ ~/DockerProjects/
├── portainer/ +-- portainer/
│ ├── docker-compose.yml | +-- docker-compose.yml
│ └── data/ | +-- data/
├── vaultwarden/ +-- vaultwarden/
│ ├── docker-compose.yml | +-- docker-compose.yml
│ └── data/ | +-- data/
└── nextcloud/ +-- nextcloud/
└── docker-compose.yml +-- docker-compose.yml
``` ```
**Konfigurace cesty:** **Konfigurace cesty:**
@@ -104,9 +104,9 @@ dk-backup --dry-run
--- ---
## 📚 Detail ke každému skriptu ## Detail ke každému skriptu
### `docker-update.sh` `dk-update` ### `docker-update.sh` -> `dk-update`
Bezpečná aktualizace Docker Compose projektů. Bezpečná aktualizace Docker Compose projektů.
@@ -122,7 +122,7 @@ dk-update --dry-run # ukáže co by se dělalo, neprovede
3. Restartuje s novými image 3. Restartuje s novými image
4. Ověří, že vše běží 4. Ověří, že vše běží
### `docker-backup.sh` `dk-backup` ### `docker-backup.sh` -> `dk-backup`
Záloha Docker projektů na NAS. Záloha Docker projektů na NAS.
@@ -138,7 +138,7 @@ dk-backup --auto # bez dotazovani (cron-friendly)
- Používá `tar --zstd` (moderní komprese) - Používá `tar --zstd` (moderní komprese)
- Staré zálohy se **nemazou** (musíš ručně) - Staré zálohy se **nemazou** (musíš ručně)
### `docker-cleanup.sh` `dk-cleanup` ### `docker-cleanup.sh` -> `dk-cleanup`
Bezpečné čištění Docker odpadu. Bezpečné čištění Docker odpadu.
@@ -150,11 +150,11 @@ dk-cleanup --all # dangling + build cache + sites + tmp
``` ```
**Nikdy nemaže:** **Nikdy nemaže:**
- Používané images - Používané images
- Bind-mount ani named volume data - Bind-mount ani named volume data
- Běžící kontejnery - Běžící kontejnery
### `docker-restore.sh` `dk-restore` ### `docker-restore.sh` -> `dk-restore`
Obnova ze zálohy. Obnova ze zálohy.
@@ -165,7 +165,7 @@ dk-restore --only portainer # jen jeden projekt
dk-restore --from 20240801-120000 # konkretni zaloha dk-restore --from 20240801-120000 # konkretni zaloha
``` ```
### `disk-watch.sh` `dk-watch` ### `disk-watch.sh` -> `dk-watch`
Sledování volného místa. Sledování volného místa.
@@ -174,7 +174,7 @@ dk-watch # jen info o aktualnim stavu
dk-watch --alert # posli Telegram alert kdyz < 10% volneho dk-watch --alert # posli Telegram alert kdyz < 10% volneho
``` ```
### `mount-nas.sh` `dk-nas` ### `mount-nas.sh` -> `dk-nas`
Připojí NAS SMB share. Připojí NAS SMB share.
@@ -185,10 +185,10 @@ dk-nas --umount # odpoj
``` ```
**Konfigurace:** **Konfigurace:**
- `SMB_SERVER` default `<nas-ip>` - `SMB_SERVER` - default `<nas-ip>`
- `SMB_SHARE` default `Multimedia` - `SMB_SHARE` - default `Multimedia`
- `SMB_USER` default `mates` - `SMB_USER` - default `mates`
- `TARGET` default `/Volumes/<ssd-data-mount>/multimedia` - `TARGET` - default `/Volumes/<ssd-data-mount>/multimedia`
- Heslo je v **macOS keychainu** pod `SMB:<server>/<share>` - Heslo je v **macOS keychainu** pod `SMB:<server>/<share>`
### `update-macos.sh` ### `update-macos.sh`
@@ -201,33 +201,33 @@ Spustí `softwareupdate` na macOS.
--- ---
## 🔐 Bezpečnost ## Bezpečnost
- **Všechny skripty kontrolují `$EUID == 0`** (musíš být root pro sudo) - **Všechny skripty kontrolují `$EUID == 0`** (musíš být root pro sudo)
- **Všechny skripty podporují `--dry-run`** - **Všechny skripty podporují `--dry-run`**
- **Žádné destruktivní akce bez potvrzení** - **Žádné destruktivní akce bez potvrzení**
- **Hesla v macOS keychainu**, ne v skriptech - **Hesla v macOS keychainu**, ne v skriptech
--- ---
## 🏗 Struktura ## Struktura
``` ```
mates-install-scripts/ mates-install-scripts/
├── README.md # Tento soubor +-- README.md # Tento soubor
├── LICENSE # MIT +-- LICENSE # MIT
├── docker-update.sh # Aktualizace Docker +-- docker-update.sh # Aktualizace Docker
├── docker-backup.sh # Záloha na NAS +-- docker-backup.sh # Záloha na NAS
├── docker-cleanup.sh # Čištění odpadu +-- docker-cleanup.sh # Čištění odpadu
├── docker-restore.sh # Obnova ze zálohy +-- docker-restore.sh # Obnova ze zálohy
├── disk-watch.sh # Sledování místa +-- disk-watch.sh # Sledování místa
├── mount-nas.sh # Mount NAS +-- mount-nas.sh # Mount NAS
└── update-macos.sh # Aktualizace macOS +-- update-macos.sh # Aktualizace macOS
``` ```
--- ---
## 📚 Související ## Související
- **Jotty:** knowledge base (detailní postupy, troubleshooting) - **Jotty:** knowledge base (detailní postupy, troubleshooting)
- **mates-docker-services:** Docker Compose šablony pro 14 služeb - **mates-docker-services:** Docker Compose šablony pro 14 služeb
+14 -14
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# disk-watch.sh sledování volného místa na Docker datech # disk-watch.sh -- sledování volného místa na Docker datech
# #
# Kontroluje: # Kontroluje:
# - <ssd-data-mount> (Docker data) # - <ssd-data-mount> (Docker data)
@@ -48,7 +48,7 @@ WARNINGS=()
check_disk() { check_disk() {
local path="$1" threshold="$2" label="$3" local path="$1" threshold="$2" label="$3"
if [ ! -d "$path" ]; then if [ ! -d "$path" ]; then
printf '%s%s%s %s adresář neexistuje\n' "$YELLOW" "" "$NC" "$label" printf '%s%s%s %s -- adresář neexistuje\n' "$YELLOW" "" "$NC" "$label"
return return
fi fi
# df v macOS nevrací % použití přímo; parsujeme z výstupu # df v macOS nevrací % použití přímo; parsujeme z výstupu
@@ -60,23 +60,23 @@ check_disk() {
total=$(echo "$line" | awk '{print $2}') total=$(echo "$line" | awk '{print $2}')
if [ -z "$capacity" ]; then if [ -z "$capacity" ]; then
printf '%s%s%s %s nelze přečíst\n' "$YELLOW" "" "$NC" "$label" printf '%s%s%s %s -- nelze přečíst\n' "$YELLOW" "" "$NC" "$label"
return return
fi fi
if [ "$capacity" -ge "$threshold" ]; then if [ "$capacity" -ge "$threshold" ]; then
printf '%s%s %s %s/%s (%s%%) %sPŘEKROČEN PRAH%s (%s%%)\n' \ printf '%s%s %s %s/%s (%s%%) -- %sPŘEKROČEN PRAH%s (%s%%)\n' \
"$RED" "$NC" "$label" "$used" "$total" "$capacity" "$RED" "$NC" "$threshold" "$RED" "$NC" "$label" "$used" "$total" "$capacity" "$RED" "$NC" "$threshold"
WARNINGS+=("$label: ${capacity}% (prah ${threshold}%)") WARNINGS+=("$label: ${capacity}% (prah ${threshold}%)")
else else
printf '%s%s %s %s/%s (%s%%) OK\n' \ printf '%s%s %s %s/%s (%s%%) -- OK\n' \
"$GREEN" "$NC" "$label" "$used" "$total" "$capacity" "$GREEN" "$NC" "$label" "$used" "$total" "$capacity"
fi fi
} }
check_docker_disk() { check_docker_disk() {
if ! docker info >/dev/null 2>&1; then if ! docker info >/dev/null 2>&1; then
printf '%s%s Docker není dostupný\n' "$YELLOW" "$NC" printf '%s%s Docker -- není dostupný\n' "$YELLOW" "$NC"
return return
fi fi
@@ -85,7 +85,7 @@ check_docker_disk() {
out=$(docker system df --format '{{.Type}}\t{{.Size}}\t{{.Reclaimable}}' 2>/dev/null || true) out=$(docker system df --format '{{.Type}}\t{{.Size}}\t{{.Reclaimable}}' 2>/dev/null || true)
if [ -z "$out" ]; then if [ -z "$out" ]; then
printf '%s%s Docker disk nešlo přečíst\n' "$YELLOW" "$NC" printf '%s%s Docker disk -- nešlo přečíst\n' "$YELLOW" "$NC"
return return
fi fi
@@ -95,10 +95,10 @@ check_docker_disk() {
images_size_bytes=$(docker system df --format '{{.Type}}\t{{.Size}}' \ images_size_bytes=$(docker system df --format '{{.Type}}\t{{.Size}}' \
| awk -F'\t' '$1 == "Images" {print $2}') | awk -F'\t' '$1 == "Images" {print $2}')
printf '%s%s Docker images: %s\n' "$BLUE" "$NC" "${images_size_bytes:-neznámé}" printf '%s%s Docker images: %s\n' "$BLUE" "$NC" "${images_size_bytes:-neznámé}"
# Velké images (>500 MB), které nejsou používané # Velké images (>500 MB), které nejsou používané
printf '%s%s Velké images (>500 MB):\n' "$BLUE" "$NC" printf '%s%s Velké images (>500 MB):\n' "$BLUE" "$NC"
docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}\t{{.ID}}' \ docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}\t{{.ID}}' \
| awk -F'\t' '{ | awk -F'\t' '{
size = $1 size = $1
@@ -110,7 +110,7 @@ check_docker_disk() {
printf ' %s\n' "$line" printf ' %s\n' "$line"
done done
# Nepoužívané images (pozor, ne "používané" bezpečnost) # Nepoužívané images (pozor, ne "používané" -- bezpečnost)
unused=$(docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}' \ unused=$(docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}' \
| awk -F'\t' ' | awk -F'\t' '
/^([0-9.]+[kMG]B)\s/ { /^([0-9.]+[kMG]B)\s/ {
@@ -121,7 +121,7 @@ check_docker_disk() {
if (mb + 0 > 200) print size, $2 if (mb + 0 > 200) print size, $2
}' | head -5) }' | head -5)
if [ -n "$unused" ]; then if [ -n "$unused" ]; then
printf '%s%s Kandidáti na vyčištění (>200 MB):\n' "$YELLOW" "$NC" printf '%s%s Kandidáti na vyčištění (>200 MB):\n' "$YELLOW" "$NC"
echo "$unused" | while read -r line; do printf ' %s\n' "$line"; done echo "$unused" | while read -r line; do printf ' %s\n' "$line"; done
fi fi
} }
@@ -130,7 +130,7 @@ check_top_offenders() {
if [ ! -d "$SSD_DATA/Dockery" ]; then if [ ! -d "$SSD_DATA/Dockery" ]; then
return return
fi fi
printf '\n%s%s Top 5 největších adresářů v <docker-projects-root>:\n' "$BLUE" "$NC" printf '\n%s%s Top 5 největších adresářů v <docker-projects-root>:\n' "$BLUE" "$NC"
/bin/du -sh "$SSD_DATA"/Dockery/*/ 2>/dev/null \ /bin/du -sh "$SSD_DATA"/Dockery/*/ 2>/dev/null \
| /usr/bin/sort -rh \ | /usr/bin/sort -rh \
| /usr/bin/head -5 \ | /usr/bin/head -5 \
@@ -148,7 +148,7 @@ check_docker_disk
check_top_offenders check_top_offenders
if [ "${#WARNINGS[@]}" -gt 0 ]; then if [ "${#WARNINGS[@]}" -gt 0 ]; then
printf '\n%s%s VAROVÁNÍ:\n' "$RED" "$NC" printf '\n%s%s VAROVÁNÍ:\n' "$RED" "$NC"
for w in "${WARNINGS[@]}"; do for w in "${WARNINGS[@]}"; do
printf ' - %s\n' "$w" printf ' - %s\n' "$w"
done done
@@ -156,7 +156,7 @@ fi
if [ "$ALERT" = "1" ] && [ "${#WARNINGS[@]}" -gt 0 ]; then if [ "$ALERT" = "1" ] && [ "${#WARNINGS[@]}" -gt 0 ]; then
# Alert přes Hermes Telegram cron # Alert přes Hermes Telegram cron
MSG=" Disk Watch překročen prah MSG=" Disk Watch -- překročen prah
$(printf '%s\n' "${WARNINGS[@]}") $(printf '%s\n' "${WARNINGS[@]}")
Datum: $(date '+%Y-%m-%d %H:%M:%S') Datum: $(date '+%Y-%m-%d %H:%M:%S')
+4 -4
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# docker-backup.sh bezpečná záloha Docker projektů a named volumes # docker-backup.sh -- bezpečná záloha Docker projektů a named volumes
# #
# - vytvoří timestamp složku v <backup-root>/ # - vytvoří timestamp složku v <backup-root>/
# - pro každý projekt v <docker-projects-root> zastaví kontejnery, # - pro každý projekt v <docker-projects-root> zastaví kontejnery,
@@ -97,7 +97,7 @@ FAILED=()
for project in "${PROJECTS[@]}"; do for project in "${PROJECTS[@]}"; do
cd "$DOCKERY/$project" cd "$DOCKERY/$project"
ARCHIVE="$DEST/${project}.tar.zst" ARCHIVE="$DEST/${project}.tar.zst"
log " [$project] tar -c <docker-projects-root>/$project/ $ARCHIVE" log " [$project] tar -c <docker-projects-root>/$project/ -> $ARCHIVE"
# absolutní cesta (background tar pitfall: vždy absolutní) # absolutní cesta (background tar pitfall: vždy absolutní)
if /usr/bin/tar --exclude='._*' --exclude='.DS_Store' \ if /usr/bin/tar --exclude='._*' --exclude='.DS_Store' \
--use-compress-program='/opt/homebrew/bin/zstd -1 -T0' \ --use-compress-program='/opt/homebrew/bin/zstd -1 -T0' \
@@ -125,7 +125,7 @@ VOLUMES=$(docker volume ls --format '{{.Name}}' \
for vol in $VOLUMES; do for vol in $VOLUMES; do
ARCHIVE="$DEST/${vol}.tar.zst" ARCHIVE="$DEST/${vol}.tar.zst"
log " [volume:$vol] $ARCHIVE" log " [volume:$vol] -> $ARCHIVE"
# Nejdřív dekomprimuj na hostiteli, pak pošli do kontejneru (alpine tar neumí zstd) # Nejdřív dekomprimuj na hostiteli, pak pošli do kontejneru (alpine tar neumí zstd)
if docker run --rm \ if docker run --rm \
-v "${vol}:/src:ro" \ -v "${vol}:/src:ro" \
@@ -197,7 +197,7 @@ log "======================================"
log "Záloha: $DEST" log "Záloha: $DEST"
if [ "${#FAILED[@]}" -gt 0 ]; then if [ "${#FAILED[@]}" -gt 0 ]; then
err "Selhalo: ${#FAILED[@]}" err "Selhalo: ${#FAILED[@]}"
for f in "${FAILED[@]}"; do err " $f"; done for f in "${FAILED[@]}"; do err " [FAIL] $f"; done
exit 1 exit 1
fi fi
log "Vše OK." log "Vše OK."
+11 -11
View File
@@ -1,12 +1,12 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# docker-cleanup.sh bezpečné čištění Docker odpadu # docker-cleanup.sh -- bezpečné čištění Docker odpadu
# #
# Cíle (vše s výslovným potvrzením nebo dry-run): # Cíle (vše s výslovným potvrzením nebo dry-run):
# - dangling images (<none>:<none>) # - dangling images (<none>:<none>)
# - starý build cache (docker builder prune -f) # - starý build cache (docker builder prune -f)
# - opuštěné (orphaned) Docker sítě nikdy bridge/host/none # - opuštěné (orphaned) Docker sítě -- nikdy bridge/host/none
# - zastaralé images s tagem <none> ale s referencí (REPO@sha256) # - zastaralé images s tagem <none> ale s referencí (REPO@sha256...)
# - dočasné soubory (XDG_CACHE_HOME pro docker, /tmp/docker-*) # - dočasné soubory (XDG_CACHE_HOME pro docker, /tmp/docker-*)
# #
# Nikdy nemaže: # Nikdy nemaže:
@@ -98,7 +98,7 @@ show_plan_header() {
# === DANGLING IMAGES === # === DANGLING IMAGES ===
plan_dangling() { plan_dangling() {
if [ "$DO_DANGLING" = "0" ]; then return; fi if [ "$DO_DANGLING" = "0" ]; then return; fi
printf '%s Dangling images (<none>:<none>):%s\n' "$BLUE" "$NC" printf '%s Dangling images (<none>:<none>):%s\n' "$BLUE" "$NC"
local pure_dangling=0 local pure_dangling=0
local stopped_holding=0 local stopped_holding=0
@@ -110,7 +110,7 @@ plan_dangling() {
holders=$(docker ps -a --filter "ancestor=$id" --format '{{.Names}}\t{{.Status}}' 2>/dev/null | head -3) holders=$(docker ps -a --filter "ancestor=$id" --format '{{.Names}}\t{{.Status}}' 2>/dev/null | head -3)
if [ -n "$holders" ]; then if [ -n "$holders" ]; then
stopped_holding=$((stopped_holding + 1)) stopped_holding=$((stopped_holding + 1))
printf ' %s %s drží zastavený kontejner: %s\n' \ printf ' %s %s drží zastavený kontejner: %s\n' \
"$id" "$size" "$(echo "$holders" | head -1 | awk '{print $1}')" "$id" "$size" "$(echo "$holders" | head -1 | awk '{print $1}')"
else else
pure_dangling=$((pure_dangling + 1)) pure_dangling=$((pure_dangling + 1))
@@ -129,7 +129,7 @@ plan_dangling() {
fi fi
if [ "$stopped_holding" -gt 0 ]; then if [ "$stopped_holding" -gt 0 ]; then
PLANNED_ITEMS+=("dangling-with-stopped-containers:$stopped_holding") PLANNED_ITEMS+=("dangling-with-stopped-containers:$stopped_holding")
printf ' 💡 Pro smazání těchto images je nutné nejprve odstranit zastavené kontejnery (--stopped-containers)\n' printf ' Pro smazání těchto images je nutné nejprve odstranit zastavené kontejnery (--stopped-containers)\n'
fi fi
fi fi
} }
@@ -137,7 +137,7 @@ plan_dangling() {
# === BUILD CACHE === # === BUILD CACHE ===
plan_build_cache() { plan_build_cache() {
if [ "$DO_BUILDER" = "0" ]; then return; fi if [ "$DO_BUILDER" = "0" ]; then return; fi
printf '%s Build cache:%s\n' "$BLUE" "$NC" printf '%s Build cache:%s\n' "$BLUE" "$NC"
local size local size
size=$(docker system df --format '{{.Type}}\t{{.Size}}' 2>/dev/null \ size=$(docker system df --format '{{.Type}}\t{{.Size}}' 2>/dev/null \
@@ -158,7 +158,7 @@ plan_build_cache() {
# === ORPHANED NETWORKS === # === ORPHANED NETWORKS ===
plan_networks() { plan_networks() {
if [ "$DO_NETWORKS" = "0" ]; then return; fi if [ "$DO_NETWORKS" = "0" ]; then return; fi
printf '%s Opuštěné Docker sítě:%s\n' "$BLUE" "$NC" printf '%s Opuštěné Docker sítě:%s\n' "$BLUE" "$NC"
local count=0 local count=0
# Najdi sítě, které NEpoužívá žádný kontejner # Najdi sítě, které NEpoužívá žádný kontejner
@@ -188,7 +188,7 @@ plan_networks() {
# === TMP FILES === # === TMP FILES ===
plan_tmp() { plan_tmp() {
if [ "$DO_TMP" = "0" ]; then return; fi if [ "$DO_TMP" = "0" ]; then return; fi
printf '%s Dočasné soubory:%s\n' "$BLUE" "$NC" printf '%s Dočasné soubory:%s\n' "$BLUE" "$NC"
local total_bytes=0 local total_bytes=0
local paths=() local paths=()
@@ -237,7 +237,7 @@ confirm() {
# === STOPPED CONTAINERS === # === STOPPED CONTAINERS ===
plan_stopped() { plan_stopped() {
if [ "$DO_STOPPED" = "0" ]; then return; fi if [ "$DO_STOPPED" = "0" ]; then return; fi
printf '%s Zastavené kontejnery:%s\n' "$BLUE" "$NC" printf '%s Zastavené kontejnery:%s\n' "$BLUE" "$NC"
local count=0 local count=0
while IFS= read -r line; do while IFS= read -r line; do
@@ -305,7 +305,7 @@ if [ "$DO_NETWORKS" = "1" ]; then
fi fi
if [ "$DO_TMP" = "1" ]; then if [ "$DO_TMP" = "1" ]; then
log "mazání starých /tmp/docker-* (7 dní)" log "mazání starých /tmp/docker-* (7 dní)"
# -print -delete musí být v tomto pořadí; -delete sám o sobě na macOS BSD find někdy selže # -print -delete musí být v tomto pořadí; -delete sám o sobě na macOS BSD find někdy selže
/usr/bin/find /tmp -maxdepth 1 -name 'docker-*' -type f -mtime +7 -print 2>&1 | while read -r f; do /usr/bin/find /tmp -maxdepth 1 -name 'docker-*' -type f -mtime +7 -print 2>&1 | while read -r f; do
log " rm: $f" log " rm: $f"
+6 -6
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# docker-restore.sh bezpečná obnova Docker projektů z tar.zst zálohy # docker-restore.sh -- bezpečná obnova Docker projektů z tar.zst zálohy
# #
# - zobrazí dostupné zálohy v $BACKUP_ROOT # - zobrazí dostupné zálohy v $BACKUP_ROOT
# - vyžádá potvrzení (nebo --auto) # - vyžádá potvrzení (nebo --auto)
@@ -230,11 +230,11 @@ for project in "${SELECTED[@]}"; do
case "$sub" in case "$sub" in
_pre-restore-*) continue ;; _pre-restore-*) continue ;;
docker-compose.y*ml) continue ;; docker-compose.y*ml) continue ;;
.env|.env.*) continue ;; # .env necháme je to runtime konfigurace .env|.env.*) continue ;; # .env necháme -- je to runtime konfigurace
.DS_Store) continue ;; .DS_Store) continue ;;
esac esac
if [ -e "$SRC/$sub" ]; then if [ -e "$SRC/$sub" ]; then
log " [$project] mv $sub _pre-restore-$TS_NOW/$project/" log " [$project] mv $sub -> _pre-restore-$TS_NOW/$project/"
mv "$SRC/$sub" "$DEST/$sub" 2>&1 || warn " mv $sub selhal" mv "$SRC/$sub" "$DEST/$sub" 2>&1 || warn " mv $sub selhal"
fi fi
done done
@@ -325,10 +325,10 @@ log "======================================"
log " SHRNUTÍ OBNOVY" log " SHRNUTÍ OBNOVY"
log "======================================" log "======================================"
log "Obnoveno:" log "Obnoveno:"
for p in "${SELECTED[@]}"; do log " $p"; done for p in "${SELECTED[@]}"; do log " [OK] $p"; done
if [ "${#FAILED[@]}" -gt 0 ]; then if [ "${#FAILED[@]}" -gt 0 ]; then
err "Selhalo:" err "Selhalo:"
for f in "${FAILED[@]}"; do err " $f"; done for f in "${FAILED[@]}"; do err " [FAIL] $f"; done
fi fi
log "" log ""
log "Současná data jsou v: $DOCKERY/_pre-restore-$TS_NOW/" log "Současná data jsou v: $DOCKERY/_pre-restore-$TS_NOW/"
@@ -338,5 +338,5 @@ log ""
if [ "$all_healthy" = "1" ]; then if [ "$all_healthy" = "1" ]; then
log "Všechny kontejnery běží." log "Všechny kontejnery běží."
else else
warn "Některé kontejnery nejsou v pořádku zkontrolujte logy." warn "Některé kontejnery nejsou v pořádku -- zkontrolujte logy."
fi fi
+3 -3
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# docker-update.sh bezpečná aktualizace Docker Compose projektů # docker-update.sh -- bezpečná aktualizace Docker Compose projektů
# #
# - zastaví všechny kontejnery, # - zastaví všechny kontejnery,
# - stáhne nové image (docker compose pull), # - stáhne nové image (docker compose pull),
@@ -170,12 +170,12 @@ log "======================================"
log " SHRNUTÍ" log " SHRNUTÍ"
log "======================================" log "======================================"
log "Aktualizováno: ${#UPDATED[@]} projekt(ů)" log "Aktualizováno: ${#UPDATED[@]} projekt(ů)"
for p in "${UPDATED[@]:-}"; do [ -n "$p" ] && log " $p"; done for p in "${UPDATED[@]:-}"; do [ -n "$p" ] && log " [OK] $p"; done
log "Přeskočeno (beze změny): ${#SKIPPED[@]}" log "Přeskočeno (beze změny): ${#SKIPPED[@]}"
for p in "${SKIPPED[@]:-}"; do [ -n "$p" ] && log " - $p"; done for p in "${SKIPPED[@]:-}"; do [ -n "$p" ] && log " - $p"; done
if [ "${#FAILED[@]}" -gt 0 ]; then if [ "${#FAILED[@]}" -gt 0 ]; then
log "Selhalo: ${#FAILED[@]}" log "Selhalo: ${#FAILED[@]}"
for p in "${FAILED[@]}"; do err " $p"; done for p in "${FAILED[@]}"; do err " [FAIL] $p"; done
fi fi
log "" log ""
log "Log: $LOG" log "Log: $LOG"
+7 -7
View File
@@ -14,31 +14,31 @@ if ! command -v brew >/dev/null 2>&1; then
exit 1 exit 1
fi fi
echo " Aktualizace Homebrew metadata..." echo "-> Aktualizace Homebrew metadata..."
brew update brew update
echo "" echo ""
echo " Upgrade formulae..." echo "-> Upgrade formulae..."
brew upgrade brew upgrade
echo "" echo ""
echo " Upgrade casks..." echo "-> Upgrade casks..."
brew upgrade --cask brew upgrade --cask
echo "" echo ""
echo " Cleanup..." echo "-> Cleanup..."
brew cleanup brew cleanup
echo "" echo ""
echo " Autoremove..." echo "-> Autoremove..."
brew autoremove brew autoremove
echo "" echo ""
echo " Health check..." echo "-> Health check..."
brew doctor brew doctor
echo "" echo ""
echo " Outdated packages:" echo "-> Outdated packages:"
brew outdated || true brew outdated || true
echo "" echo ""