Calibre duomenų bazės archyvavimas į Telegram


 
Norėjau išsaugoti Calibre duomenų bazę, kurios dydis siekia 26 GB, ir įkelti ją saugojimui į Telegram. Kadangi Telegram turi įkėlimo failų dydžio ribojimus, nusprendžiau suskirstyti duomenis į mažesnius archyvus, kiekvieno apie 1 GB dydžio.

Įvadas

Šis įrašas skirtas supažindinti su bash skriptu, kuris automatiškai archyvuoja failus iš nurodyto katalogo į mažesnius gabaliukus, kad atitiktų nustatytą dydį. Apžvelgsiu, kam šis skriptas skirtas, kaip jis veikia, kaip jį naudoti, jo privalumus ir trūkumus bei potencialius patobulinimus.

 

 #!/bin/bash
 
# Pradiniai nustatymai
SOURCE_DIR="/media/vaidotak/1f3e2462-ef6f-47a1-a3f8-9300d4bec261/calibre/"
DEST_DIR="$HOME/Archyvuoti/Calibre"  # Kur išsaugoti archyvus
MAX_SIZE=$((1024 * 1024 * 1024))  # Maksimalus archyvo dydis baitais (1 GB)
COUNTER=1
 
# Sukuriame tikslinį katalogą, jei jo nėra
mkdir -p "$DEST_DIR"
 
# Funkcija sukurti tar archyvą iš failų sąrašo
create_archive() {
  local archive_name="${DEST_DIR}/archive_${COUNTER}.tar"
  tar -cf "$archive_name" --files-from=/dev/null
  for file in "$@"; do
    tar --append --file="$archive_name" -C "$SOURCE_DIR" "$file"
  done
  COUNTER=$((COUNTER + 1))
}
 
# Pereiname per visus failus ir sudedame į archyvus
current_size=0
current_files=()
 
while IFS= read -r -d '' file; do
  file_size=$(stat -c%s "$file")
 
  if (( current_size + file_size > MAX_SIZE )); then
    create_archive "${current_files[@]}"
    current_files=()
    current_size=0
  fi
 
  current_files+=("${file#$SOURCE_DIR/}")
  current_size=$((current_size + file_size))
done < <(find "$SOURCE_DIR" -type f -print0)
 
# Paskutinis archyvas
if [ ${#current_files[@]} -ne 0 ]; then
  create_archive "${current_files[@]}"
fi
 
echo "Archyvavimas baigtas. Sukurti archyvai:"
ls -lh "$DEST_DIR" 


Kam skirtas

Šis skriptas skirtas tiems, kurie nori efektyviai tvarkyti didelį kiekį failų, išsaugotų tam tikrame kataloge, ir juos suskirstyti į tvarkomas dalis (archyvus) pagal nustatytą dydį. Tai ypač naudinga, kai norite saugoti ar kopijuoti failus, bet norite, kad kiekvienas archyvas būtų valdomas atskirai.

Kaip veikia

  1. Nustatymai: Pradžioje nustatomi pradiniai katalogų ir dydžio parametrai.
  2. Archyvavimas: Skriptas naudoja tar komandą, kad sukurtų archyvus (tar formatu) iš failų, kuriuos randa find komanda.
  3. Gabaliukai: Failai sudedami į archyvus tol, kol archyvo dydis pasiekia nustatytą maksimalų dydį (MAX_SIZE).
  4. Katalogų struktūra: Kiekvienas archyvas išlaiko pradinės katalogo struktūrą, kuri palengvina vėlesnį failų paiešką ir išskyrimą.

Kaip naudotis

  1. Nustatymai: Pakeiskite SOURCE_DIR ir DEST_DIR kintamuosius pagal savo poreikius.
  2. Paleidimas: Paleiskite skriptą iš terminalo (./skriptas.sh), kad pradėtumėte archyvavimo procesą.
  3. Rezultatai: Baigus archyvavimą, jūsų nurodytame DEST_DIR kataloge bus sukurti archyvai su sugrupuotais failais.

Privalumai

  • Automatizavimas: Automatiškai suskirsto failus pagal nustatytą dydį, taip sutaupant laiką ir resursus.
  • Išsaugota struktūra: Kiekvienas archyvas išlaiko pradinę katalogų struktūrą, todėl lengviau atstatyti arba ieškoti konkrečių failų.

Trūkumai

  • Galimi gabaliukai: Archyvai gali būti gabaliukai, kuriuos reikia atskirai tvarkyti, jei reikia prieigos prie konkretaus failo.
  • Priklausomybė nuo tar: Skriptas naudoja tar komandą, todėl priklauso nuo tar įrankio galimybių.

Patobulinimai

  • Paieškos funkcijos: Galėtų būti pridėta paieškos funkcija, kuri leistų greičiau rasti konkretų failą tarp archyvų.
  • Parametrizacija: Papildomi parametrai, pvz., skirtingi dydžiai arba skirtingi formatų filtras.

Išvada

Šis bash skriptas yra galingas įrankis tiems, kurie turi tvarkyti didelį kiekį failų ir nori juos saugoti ar perduoti mažesniais, valdomais gabaliukais. Jis leidžia išlaikyti struktūrą ir efektyviai valdyti failų grupes. Naudojant šį skriptą, galite automatizuoti failų tvarkymo procesą ir padidinti darbo efektyvumą.

Jeigu turite klausimų ar norite sužinoti daugiau, prašome nedvejoti užduoti!

P.S. kad žinočiau, kur kokiame archyve galima rasti reikiamą failą, pasinaudojau dar vienu skriptu ir išsisaugojau informaciją Obsidian’e

 #!/bin/bash
 
# Pradiniai nustatymai
ARCHIVE_DIR="$HOME/Archyvuoti/Calibre"  # Pakeisk į savo katalogą
LIST_FILE="$HOME/Obsidian/notes/tar_sarasas.md"
 
# Išvalome seno sąrašo failą
> "$LIST_FILE"
 
# Pereiname per visus archyvus ir sugeneruojame failų sąrašą
for archive in "$ARCHIVE_DIR"/*.tar; do
  tar -tf "$archive" | while read -r file; do
    # Tikriname failo galūnes
    case "$file" in
      *.doc | *.DOC | *.docx | *.DOCX | *.epub | *.EPUB | *.txt | *.mobi | *.MOBI | *.pdf | *.PDF )
        # Sutrumpiname kelią ir formuojame įrašą
        formatted_file=$(echo "$file" | sed -e "s|$ARCHIVE_DIR/||")
        archive_name=$(basename "$archive")
        echo "${formatted_file} - ${archive_name}" | sed -e "s|media/vaidotak/1f3e2462-ef6f-47a1-a3f8-9300d4bec261/calibre/||g; s|/home/vaidotak/Archyvuoti/Calibre/| - |g" >> "$LIST_FILE"
        ;;
    esac
  done
done
 
# Išrūšiuojame sąrašą
sort "$LIST_FILE" -o "$LIST_FILE"
 
echo "Sąrašas sugeneruotas: $LIST_FILE" 

Komentarai

Populiarūs šio tinklaraščio įrašai

Configuring a NixOS firewall for everyday use

Setting up syncthing as a service on openSUSE and other Linux distributions

Automatinis didelio kiekio failų siuntimo per Telegram skriptas