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
- Nustatymai: Pradžioje nustatomi pradiniai katalogų ir dydžio parametrai.
- Archyvavimas: Skriptas naudoja
tar
komandą, kad sukurtų archyvus (tar
formatu) iš failų, kuriuos randafind
komanda. - Gabaliukai: Failai sudedami į archyvus tol, kol archyvo dydis pasiekia nustatytą maksimalų dydį (
MAX_SIZE
). - Katalogų struktūra: Kiekvienas archyvas išlaiko pradinės katalogo struktūrą, kuri palengvina vėlesnį failų paiešką ir išskyrimą.
Kaip naudotis
- Nustatymai: Pakeiskite
SOURCE_DIR
irDEST_DIR
kintamuosius pagal savo poreikius. - Paleidimas: Paleiskite skriptą iš terminalo (
./skriptas.sh
), kad pradėtumėte archyvavimo procesą. - 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 naudojatar
komandą, todėl priklauso nuotar
į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
Rašyti komentarą