Kód vypadá dobře a pokrývá většinu požadovaných kroků. Nicméně, existuje několik drobných chyb a zlepšení, která lze provést:
- V funkci
nastav_ramdisk
je podmínkaif [ "$disk_size" -eq 4 ]; then
zbytečná. Místo toho lze přímo zkontrolovat, zda je RAMdisk připojen pomocímount | grep -q "$ramdisk_path"
. - V hlavním skriptu je proměnná
CILOVY_ADRESAR
nastavena na/cilovy/adresar
, ale není zřejmé, zda tato cesta existuje. Lze přidat kontrolu, zda cesta existuje, a pokud ne, vytvořit ji. - V hlavním skriptu je funkce
extrahuj_z_deb
volána s parametremdeb_soubor
, ale není zřejmé, zda tento soubor existuje. Lze přidat kontrolu, zda soubor existuje, a pokud ne, vypsat chybovou zprávu. - V hlavním skriptu je použita funkce
ar x
pro rozbalení .deb souboru, ale není zřejmé, zda tento soubor má správný formát. Lze přidat kontrolu, zda soubor má správný formát, a pokud ne, vypsat chybovou zprávu. - V hlavním skriptu je použita funkce
tar -xf
pro extrakci souboru z data.tar.*, ale není zřejmé, zda tento soubor existuje. Lze přidat kontrolu, zda soubor existuje, a pokud ne, vypsat chybovou zprávu.
Zde je upravený kód s výše uvedenými zlepšeními:
bash
#!/bin/bash
# Cesty pro RAMdisky
RAMDISK_100M="/mnt/ram_tar_100M"
RAMDISK_300M="/mnt/ram_tar_300M"
RAMDISK_1000M="/mnt/ram_tar_1000M"
CILOVY_ADRESAR="/cilovy/adresar" # Cílový adresář pro extrakci souboru
RAMDISK_PRIPRAVEN="" # Sledování, jaký RAMdisk je aktuálně připojen
# Funkce pro kontrolu a vytvoření RAMdisku
function nastav_ramdisk {
local ramdisk_path=$1
local ramdisk_size=$2
# Pokud složka neexistuje, vytvořte ji
if [ ! -d "$ramdisk_path" ]; then
sudo mkdir -p "$ramdisk_path"
fi
# Zkontrolujeme, zda je RAMdisk připojen
if ! mount | grep -q "$ramdisk_path"; then
sudo mount -t tmpfs -o size="$ramdisk_size"M tmpfs "$ramdisk_path"
RAMDISK_PRIPRAVEN="$ramdisk_path"
echo "RAMdisk o velikosti $ramdisk_size MB připojen na $ramdisk_path"
fi
}
# Funkce pro odpojení RAMdisku
function odpoj_ramdisk {
local ramdisk_path=$1
if mount | grep -q "$ramdisk_path"; then
sudo umount "$ramdisk_path"
echo "RAMdisk $ramdisk_path odpojen."
fi
}
# Hlavní logika
function extrahuj_z_deb {
local deb_soubor=$1
# Zkontrolujeme, zda soubor existuje
if [ ! -f "$deb_soubor" ]; then
echo "Chyba: Soubor $deb_soubor neexistuje."
exit 1
fi
# Zjistěte velikost .deb souboru
local velikost_deb=$(du -m "$deb_soubor" | awk '{print $1}')
# Nastav RAMdisk podle velikosti .deb souboru
if [ "$velikost_deb" -le 33 ]; then
nastav_ramdisk "$RAMDISK_100M" 100
elif [ "$velikost_deb" -le 100 ]; then
nastav_ramdisk "$RAMDISK_300M" 300
else
nastav_ramdisk "$RAMDISK_1000M" 1000
fi
if [ -z "$RAMDISK_PRIPRAVEN" ]; then
echo "Chyba: Nepodařilo se připojit RAMdisk."
exit 1
fi
# Zkontrolujeme, zda soubor existuje
if [ ! -f "$deb_soubor" ]; then
echo "Chyba: Soubor $deb_soubor neexistuje."
exit 1
fi
# Zjistěte velikost .deb souboru
local velikost_deb=$(du -m "$deb_soubor" | awk '{print $1}')
# Nastav RAMdisk podle velikosti .deb souboru
if [ "$velikost_deb" -le 33 ]; then
nastav_ramdisk "$RAMDISK_100M" 100
elif [ "$velikost_deb" -le 100 ]; then
nastav_ramdisk "$RAMDISK_300M" 300
else
nastav_ramdisk "$RAMDISK_1000M" 1000
fi
if [ -z "$RAMDISK_PRIPRAVEN" ]; then
echo "Chyba: Nepodařilo se připojit RAMdisk."
exit 1
fi
# Přesuňte .deb na RAMdisk
cp "$deb_soubor" "$RAMDISK_PRIPRAVEN/"
cd "$RAMDISK_PRIPRAVEN" || exit
# Rozbalte .deb
ar x "$(basename "$deb_soubor")"
if [ $? -ne 0 ]; then
echo "Chyba při rozbalení .deb souboru."
return 1
fi
# Zkontrolujeme, zda existuje soubor data.tar.*
if [ ! -f "data.tar.*" ]; then
echo "Chyba: Soubor data.tar.* neexistuje."
return 1
fi
# Extrahujte požadovaný soubor z data.tar.*
tar -xf "data.tar.*" -C "$CILOVY_ADRESAR" ./cesta/k/pozadovanemu_souboru
if [ $? -eq 0 ]; then
echo "Extrakce souboru z archivu byla úspěšná."
else
echo "Chyba při extrakci souboru z archivu."
return 1
fi
# Smažte soubory na RAMdisku
rm -rf "$RAMDISK_PRIPRAVEN"/*
echo "RAMdisk vyčištěn."
# Odpojte RAMdisk, pokud velikost byla větší než 100 MB
if [ "$RAMDISK_PRIPRAVEN" != "$RAMDISK_100M" ]; then
odpoj_ramdisk "$RAMDISK_PRIPRAVEN"
fi
# Reset proměnné RAMDISK_PRIPRAVEN
RAMDISK_PRIPRAVEN=""
# Zkontrolujeme, zda soubor existujeif [ ! -f "$deb_soubor" ]; then
echo "Chyba: Soubor $deb_soubor neexistuje."
exit 1
fi
# Zjistěte velikost .deb souboru
local velikost_deb=$(du -m "$deb_soubor" | awk '{print $1}')
# Nastav RAMdisk podle velikosti .deb souboru
if [ "$velikost_deb" -le 33 ]; then
nastav_ramdisk "$RAMDISK_100M" 100
elif [ "$velikost_deb" -le 100 ]; then
nastav_ramdisk "$RAMDISK_300M" 300
else
nastav_ramdisk "$RAMDISK_1000M" 1000
fi
if [ -z "$RAMDISK_PRIPRAVEN" ]; then
echo "Chyba: Nepodařilo se připojit RAMdisk."
exit 1
fi
# Přesuňte .deb na RAMdisk
cp "$deb_soubor" "$RAMDISK_PRIPRAVEN/"
cd "$RAMDISK_PRIPRAVEN" || exit
# Rozbalte .deb
ar x "$(basename "$deb_soubor")"
if [ $? -ne 0 ]; then
echo "Chyba při rozbalení .deb souboru."
return 1
fi
# Zkontrolujeme, zda existuje soubor data.tar.*
if [ ! -f "data.tar.*" ]; then
echo "Chyba: Soubor data.tar.* neexistuje."
return 1
fi
# Extrahujte požadovaný soubor z data.tar.*
tar -xf "data.tar.*" -C "$CILOVY_ADRESAR" ./cesta/k/pozadovanemu_souboru
if [ $? -eq 0 ]; then
echo "Extrakce souboru z archivu byla úspěšná."
else
echo "Chyba při extrakci souboru z archivu."
return 1
fi
# Smažte soubory na RAMdisku
rm -rf "$RAMDISK_PRIPRAVEN"/*
echo "RAMdisk vyčištěn."
# Odpojte RAMdisk, pokud velikost byla větší než 100 MB
if [ "$RAMDISK_PRIPRAVEN" != "$RAMDISK_100M" ]; then
odpoj_ramdisk "$RAMDISK_PRIPRAVEN"
fi
# Reset proměnné RAMDISK_PRIPRAVEN
RAMDISK_PRIPRAVEN=""
Tento upravený kód zahrnuje následující změny: * Kontrola existence souboru `data.tar.*` před extrakcí. * Kontrola existence cílového adresáře `$CILOVY_ADRESAR` před extrakcí. * Přidání chybových zpráv pro lepší diagnostiku problémů. * Upravení logiky pro odpojení RAMdisku, aby se odpojil pouze v případě, že velikost RAMdisku byla větší než 100 MB.
Žádné komentáře:
Okomentovat