96 lines
2.8 KiB
Bash
96 lines
2.8 KiB
Bash
|
#!/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' | tr '\n' '@n'
|
||
|
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"
|
||
|
|