knihovna:skripty:skript-presun-foto

Přesun FOTO z personal do sdilene složky BASH Synology SKRIPT

dotaz na COPILOT: lze v synology pravidelně spouštět skript, který přesune adresáře někam jinam? (v rámci synology) jak? jak by skript měl vypadat?

Ano, na Synology NAS lze pravidelně spouštět skripty, které například přesouvají adresáře v rámci zařízení.
Nejčastěji se k tomu využívá Task Scheduler (Plánovač úloh), který je součástí systému DSM (DiskStation Manager).

🛠 Jak na to: Spouštění skriptu v Synology pomocí Plánovače úloh 1. Připravte skript Například jednoduchý skript pro přesun složek z jednoho adresáře do druhého:

  1. #!/bin/bash
  2.  
  3. # Zdrojový a cílový adresář
  4. SRC="/volume1/zdrojovy_adresar"
  5. DST="/volume1/cilovy_adresar"
  6.  
  7. # Přesun všech složek ze zdrojového do cílového adresáře
  8. find "$SRC" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$DST" \;

Tento skript přesune všechny podsložky z $SRC do $DST. Pokud chcete přesouvat i soubory, můžete upravit -type d na -type f nebo odstranit úplně.

2. Vytvořte úlohu v Plánovači úloh - Přihlaste se do DSM (webové rozhraní Synology). - Otevřete Ovládací panel > Plánovač úloh. - Klikněte na Vytvořit > Naplánovaná úloha > Spuštění skriptu. - Vyplňte: - Název úlohy (např. „Přesun složek“) - Uživatel: doporučuji root, pokud skript potřebuje plný přístup. - Na záložce Plán nastavte, kdy se má úloha spouštět (např. každý den v 2:00). - Na záložce Skript vložte výše uvedený skript. - Uložte a otestujte pomocí tlačítka Spustit.

✅ Tipy - Ujistěte se, že cílový adresář existuje. - Pokud chcete logovat výstup, přidejte na konec skriptu např. » /volume1/logs/presun.log 2>&1. - Skript můžete rozšířit o podmínky, filtrování podle názvu, stáří souborů apod.

Chcete, abych vám pomohl upravit skript podle konkrétní struktury složek nebo pravidel přesunu?

uprav skript tak, aby přesouval adresáře i se soubory prosím

Jasně! Pokud chcete přesunout celé adresáře včetně jejich obsahu (tedy i souborů a podsložek), stačí použít příkaz mv bez filtrování typu. Tady je upravený skript:

  1. #!/bin/bash
  2.  
  3. # Zdrojový a cílový adresář
  4. SRC="/volume1/zdrojovy_adresar"
  5. DST="/volume1/cilovy_adresar"
  6.  
  7. # Přesun všech položek (složek i souborů) ze zdrojového do cílového adresáře
  8. find "$SRC" -mindepth 1 -maxdepth 1 -exec mv -f {} "$DST" \;

🔍 Co skript dělá: - find „$SRC“ -mindepth 1 -maxdepth 1: najde všechny položky (soubory i složky) přímo ve zdrojovém adresáři. - -exec mv -f {} „$DST“: každou nalezenou položku přesune do cílového adresáře. - -f: vynutí přepsání, pokud v cíli existuje soubor se stejným názvem.

✅ Alternativa bez find (pokud chcete přesunout vše najednou):

  1. #!/bin/bash
  2.  
  3. SRC="/volume1/zdrojovy_adresar"
  4. DST="/volume1/cilovy_adresar"
  5.  
  6. mv -f "$SRC"/* "$DST"/

Tato verze je jednodušší, ale nefunguje dobře, pokud jsou názvy s mezerami nebo speciálními znaky. find je bezpečnější a univerzálnější.

Pokud chcete skript rozšířit o logování, kontrolu existence cílového adresáře nebo filtrování podle stáří souborů, rád vám s tím pomůžu. Stačí říct, co přesně potřebujete.

jak by vypadala verze s kontrolou existence cílového adresáře prosím?

Tady je upravená verze skriptu, která nejprve zkontroluje, zda cílový adresář existuje, a pokud ne, vytvoří ho:

  1. #!/bin/bash
  2.  
  3. # Zdrojový a cílový adresář
  4. SRC="/volume1/zdrojovy_adresar"
  5. DST="/volume1/cilovy_adresar"
  6.  
  7. # Kontrola existence cílového adresáře
  8. if [ ! -d "$DST" ]; then
  9. echo "Cílový adresář neexistuje. Vytvářím: $DST"
  10. mkdir -p "$DST"
  11. fi
  12.  
  13. # Přesun všech položek (složek i souborů) ze zdrojového do cílového adresáře
  14. find "$SRC" -mindepth 1 -maxdepth 1 -exec mv -f {} "$DST" \;

🧠 Co skript dělá navíc: - if [ ! -d „$DST“ ]; then … fi: ověří, zda cílový adresář existuje. - mkdir -p „$DST“: vytvoří cílový adresář včetně případných nadřazených složek. - echo …: vypíše informaci do logu nebo konzole (volitelné).

další dotaz na COPILOT skript pro SYNOLOGY, který přesune soubory z jedné složky do jiné, a to i z vnořených, neexistující složky na cílovém místě vytvoří

Tady je finální verze skriptu, která: - Rekurzivně přesune soubory ze zdrojové složky do cílové - Vytvoří cílové podsložky, pokud neexistují - Loguje každý přesun do ročního logu (presun_2025.log) - Při chybě odešle e-mail s výpisem chyb a souhrnem počtu přesunutých souborů

🧩 Skript: presun_souboru.sh #!/bin/bash

# Nastavení cest ZDROJ=„/volume1/zdrojova_slozka“ CIL=„/volume1/cilova_slozka“ LOG_DIR=„/volume1/logy_presunu“

# Získání aktuálního roku a dne ROK=$(date +%Y) DEN=$(date '+%Y-%m-%d') CAS=$(date '+%H:%M:%S') LOG_SOUBOR=„$LOG_DIR/presun_$ROK.log“

# Nastavení e-mailu EMAIL=„tvoje@email.cz“ SUBJECT=„Chyba při přesunu souborů - $DEN“

# Inicializace proměnných CHYBA=0 OK_COUNT=0 ERR_COUNT=0

# Vytvoření složky pro logy, pokud neexistuje mkdir -p „$LOG_DIR“

# Zápis začátku operace echo „=== Spuštění: $DEN $CAS ===“ » „$LOG_SOUBOR“

# Zkontroluj, zda zdrojová složka existuje if [ ! -d „$ZDROJ“ ]; then

echo "[CHYBA] Zdrojová složka neexistuje: $ZDROJ" >> "$LOG_SOUBOR"
CHYBA=1
ERR_COUNT=$((ERR_COUNT + 1))

else

# Najdi všechny soubory ve zdrojové složce (rekurzivně)
find "$ZDROJ" -type f | while read -r SOUBOR; do
  REL_PATH="${SOUBOR#$ZDROJ/}"
  CILNY_SOUBOR="$CIL/$REL_PATH"
  mkdir -p "$(dirname "$CILNY_SOUBOR")"
  if mv "$SOUBOR" "$CILNY_SOUBOR"; then
    echo "[OK] $CAS Přesunuto: $REL_PATH" >> "$LOG_SOUBOR"
    OK_COUNT=$((OK_COUNT + 1))
  else
    echo "[CHYBA] $CAS Nepodařilo se přesunout: $REL_PATH" >> "$LOG_SOUBOR"
    CHYBA=1
    ERR_COUNT=$((ERR_COUNT + 1))
  fi
done

fi

# Zápis souhrnu echo „— Souhrn: OK=$OK_COUNT, CHYBY=$ERR_COUNT —“ » „$LOG_SOUBOR“ echo „=== Konec: $(date '+%Y-%m-%d %H:%M:%S') ===“ » „$LOG_SOUBOR“

# Pokud nastala chyba, odešli e-mail s výpisem chyb if [ „$CHYBA“ -eq 1 ]; then

{
  echo "$SUBJECT"
  echo ""
  echo "Souhrn operace:"
  echo "Úspěšně přesunuto: $OK_COUNT souborů"
  echo "Chyby: $ERR_COUNT"
  echo ""
  echo "Výpis chyb:"
  grep "\[CHYBA\]" "$LOG_SOUBOR"
} | mail -s "$SUBJECT" "$EMAIL"

fi



📌 Požadavky - NAS musí mít funkční mail příkaz a nastavený SMTP server (Ovládací panel > Oznámení > E-mail) - E-mail se odešle pouze při chybě, s výpisem chyb a souhrnem

knihovna/skripty/skript-presun-foto.txt · Poslední úprava: autor: JJC