bash-description-ook/ook.sh

96 lines
2.8 KiB
Bash
Raw Normal View History

#!/bin/bash
# Variables pel resum
total_zips=0
total_size=0
# Funció per a processar arxius ZIP en un directori
processar_zip() {
zip_file="$1"
dir="$2"
index_file="$dir/descript.ion"
# Verificar si és un arxiu ZIP per magic number
if file "$zip_file" | grep -q 'Zip archive data'; then
# Obtenir el nom de l'arxiu ZIP sense la ruta
zip_name=$(basename "$zip_file")
# Verificar si ja ha estat registrat a descript.ion
if grep -q "^$zip_name " "$index_file" 2>/dev/null; then
echo "Arxiu ZIP '$zip_name' ja registrat a '$index_file'."
else
# Buscar i extreure el contingut de qualsevol arxiu que coincideixi amb FILE_ID.DIZ (case-insensitive)
file_id_content=$(unzip -Z1 "$zip_file" | grep -i 'file_id.diz' | while read -r diz_file; do
unzip -p "$zip_file" "$diz_file" 2>/dev/null | tr -d '\r' | sed ':a;N;$!ba;s/\n/@n/g'
done)
# Si s'ha trobat i extret l'arxiu file_id.diz
if [ -n "$file_id_content" ]; then
echo "$zip_name $file_id_content" >> "$index_file"
echo "Arxiu ZIP '$zip_name' processat i registrat a '$index_file'."
# Actualitzar resum
total_zips=$((total_zips + 1))
total_size=$((total_size + $(stat -c%s "$zip_file")))
else
echo "No s'ha trobat 'file_id.diz' a '$zip_name'."
fi
fi
else
echo "'$zip_file' no és un arxiu ZIP vàlid."
fi
}
# Funció per a processar un directori
processar_directori() {
dir="$1"
recursive="$2"
# Crear descript.ion si no existeix
index_file="$dir/descript.ion"
if [ ! -f "$index_file" ]; then
touch "$index_file"
echo "Arxiu 'descript.ion' creat a '$dir'."
fi
# Buscar arxius ZIP en el directori
for zip_file in "$dir"/*.zip "$dir"/*.ZIP "$dir"/*.Zip "$dir"/*.ZiP; do
[ -e "$zip_file" ] && processar_zip "$zip_file" "$dir"
done
# Processar subdirectoris si s'indica recursivitat
if [ "$recursive" = true ]; then
for subdir in "$dir"/*/; do
[ -d "$subdir" ] && processar_directori "$subdir" true
done
fi
}
# Processar un arxiu ZIP específic
processar_unic_zip() {
zip_file="$1"
dir=$(dirname "$zip_file")
processar_directori "$dir" false
}
# Verificar paràmetres
if [ "$1" = "-r" ]; then
# Mode recursiu
processar_directori "." true
elif [ "$1" = "-s" ] && [ -n "$2" ]; then
# Modo d'arxiu ZIP únic
if [ -f "$2" ]; then
processar_unic_zip "$2"
else
echo "L'arxiu específic no existeix."
fi
else
# Mode normal (no recursiu)
processar_directori "." false
fi
# Mostrar resum
echo "Total d'arxius ZIP nous processats: $total_zips"
echo "Mida total dels arxius ZIP processats: $total_size bytes"