Inspección de contenidos de archivos 7z mediante scripting

Avatar de Apuntes Hacking

El script que se presenta a continuación resuelve un problema concreto: determinar qué tipos de archivo (extensiones) se encuentran dentro de uno o varios comprimidos .7z, sin necesidad de descomprimirlos.

Este análisis resulta útil para auditar backups, clasificar archivos por contenido o simplemente comprender la estructura interna de múltiples comprimidos de forma automatizada.

El script completo (GitHub)

#!/bin/bash

# ============================================================
# Script: listar_extensiones_7z.sh
# Autor:   apunteshacking.com
# Fecha:   Abril 2026
# Versión: 1.0
# ============================================================
# DESCRIPCIÓN:
#   Analiza todos los archivos .7z del directorio actual y
#   extrae las extensiones únicas de los archivos contenidos
#   en su interior, sin necesidad de descomprimirlos.
# ============================================================
# USO:
#   ./listar_extensiones_7z.sh
# ============================================================
# REQUISITOS:
#   Tener instalado p7zip (comando '7z')
# ============================================================

# Mostrar cabecera informativa al usuario
echo ""
echo " ▶ LISTADOR DE EXTENSIONES EN ARCHIVOS .7z ◀"
echo "------------------------------------------------------------"
echo "  Este script analiza todos los archivos .7z del directorio"
echo "  actual y muestra las extensiones únicas que contienen."
echo "------------------------------------------------------------"
echo ""

# Crear archivo temporal
temp_file=$(mktemp)

# Procesar cada archivo .7z
for file in *.7z; do
    if [ -f "$file" ]; then
        echo "▶ Procesando: $file"
        # Listar contenido y extraer extensiones
        7z l "$file" -r 2>/dev/null | grep -oE '\.[a-zA-Z0-9]+$' >> "$temp_file"
    fi
done

# Verificar si se encontraron archivos .7z
if [ ! -s "$temp_file" ]; then
    echo ""
    echo "▶ No se encontraron archivos .7z en el directorio actual."
    echo "  O los archivos encontrados no contenían extensiones válidas."
    echo ""
    rm "$temp_file"
    exit 1
fi

# Mostrar resultados únicos ordenados
echo ""
echo "------------------------------------------------------------"
echo "  RESULTADOS"
echo "------------------------------------------------------------"
echo "Extensiones encontradas:"
echo ""

sort -u "$temp_file" | nl -w 2 -s '. '

# Contar total de extensiones únicas
total=$(sort -u "$temp_file" | wc -l)

echo ""
echo "------------------------------------------------------------"
echo "  Total de extensiones únicas: $total"
echo "------------------------------------------------------------"

# Limpiar
rm "$temp_file"

exit 0
Bash

Explicación paso a paso

Encabezado del script

#!/bin/bash
Bash

Esta línea se llama shebang. Le dice al sistema: «Para ejecutar este archivo, usa el intérprete /bin/bash«. Sin esto, el sistema no sabría qué lenguaje usar.

Comentarios informativos

# ============================================================
# Script: listar_extensiones_7z.sh
# Autor:   apunteshacking.com
# Fecha:   Abril 2026
# Versión: 1.0
# ============================================================
# DESCRIPCIÓN:
#   Analiza todos los archivos .7z del directorio actual y
#   extrae las extensiones únicas de los archivos contenidos
#   en su interior, sin necesidad de descomprimirlos.
# ============================================================
# USO:
#   ./listar_extensiones_7z.sh
# ============================================================
# REQUISITOS:
#   Tener instalado p7zip (comando '7z')
# ============================================================
Bash

Todo lo que va entre # y el final de la línea es un comentario. No se ejecuta. Es buena práctica documentar:

  • Nombre del script
  • Autor
  • Fecha y versión
  • Descripción clara
  • Uso esperado
  • Requisitos

Esto es fundamental cuando trabajamos en equipo o publicamos herramientas.

Mensajes al usuario

echo ""
echo " ▶ LISTADOR DE EXTENSIONES EN ARCHIVOS .7z ◀"
echo "------------------------------------------------------------"
echo "  Este script analiza todos los archivos .7z del directorio"
echo "  actual y muestra las extensiones únicas que contienen."
echo "------------------------------------------------------------"
echo ""
Bash

Usamos echo para mostrar información en pantalla. Los textos con y líneas son solo formato visual. Así el usuario entiende qué está pasando.

Archivo temporal

temp_file=$(mktemp)
Bash

mktemp crea un archivo temporal con nombre único (ej. /tmp/tmp.ABC123).
Lo guardamos en la variable $temp_file. Esto evita conflictos si varios usuarios ejecutan el script a la vez.

Bucle para procesar archivos .7z

for file in *.7z; do
    if [ -f "$file" ]; then
        ...
    fi
done
Bash
  • *.7z genera la lista de archivos con esa extensión.
  • [ -f "$file" ] verifica que sea un archivo regular (evita errores si no hay coincidencias).
  • El bucle ejecuta el bloque para cada archivo encontrado.

Comando estrella: 7z l

7z l "$file" -r 2>/dev/null | grep -oE '\.[a-zA-Z0-9]+$' >> "$temp_file"
Bash

Vamos por partes:

  • 7z l "$file" → Lista el contenido del .7z sin descomprimir.
  • -r → Modo recursivo (entra en subcarpetas dentro del .7z).
  • 2>/dev/null → Redirige errores (como advertencias de cabeceras) a null (basura). Así no ensuciamos la salida.
  • | → Tubería: envía la salida al siguiente comando.
  • grep -oE '\.[a-zA-Z0-9]+$':
    • -o → Solo muestra la parte que coincide.
    • -E → Expresión regular extendida.
    • \.[a-zA-Z0-9]+$ → Busca un punto seguido de letras o números al final de la línea (ej. .txt, .pdf, .jpg).
  • >> "$temp_file" → Agrega (>>) cada extensión encontrada al archivo temporal.

Etiquetas:

Avatar de Apuntes Hacking

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *