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:
#!/bin/bash # Zdrojový a cílový adresář SRC="/volume1/zdrojovy_adresar" DST="/volume1/cilovy_adresar" # Přesun všech složek ze zdrojového do cílového adresáře 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:
#!/bin/bash # Zdrojový a cílový adresář SRC="/volume1/zdrojovy_adresar" DST="/volume1/cilovy_adresar" # Přesun všech položek (složek i souborů) ze zdrojového do cílového adresáře 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):
#!/bin/bash SRC="/volume1/zdrojovy_adresar" DST="/volume1/cilovy_adresar" 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:
#!/bin/bash # Zdrojový a cílový adresář SRC="/volume1/zdrojovy_adresar" DST="/volume1/cilovy_adresar" # Kontrola existence cílového adresáře if [ ! -d "$DST" ]; then echo "Cílový adresář neexistuje. Vytvářím: $DST" mkdir -p "$DST" fi # Přesun všech položek (složek i souborů) ze zdrojového do cílového adresáře 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
