Skip to main content

Lista de Formatos Obsoletos e em Risco usando o Siegfried

Siegfried é uma alternativa ao DROID, mais moderna e sem dependência de Java:

# Instalar Siegfried
wget https://github.com/richardlehane/siegfried/releases/download/v1.11.1/siegfried_1.11.1_linux_amd64.tar.gz
tar -xzf siegfried_1.11.1_linux_amd64.tar.gz
sudo cp sf /usr/local/bin/
sudo cp roy /usr/local/bin/

# Atualizar assinaturas PRONOM
sf -update

# Executar varredura
sf -csv /caminho/para/repositorio > report.csv

Script Python para usar Siegfried

#!/usr/bin/env python3
# scan_siegfried.py

import subprocess
import csv
import json
from datetime import datetime
from pathlib import Path

def scan_with_siegfried(repository_path, output_dir='/var/siegfried/reports'):
    """
    Varredura usando Siegfried (alternativa ao DROID)
    """
    
    Path(output_dir).mkdir(parents=True, exist_ok=True)
    
    date_str = datetime.now().strftime('%Y%m%d_%H%M%S')
    csv_output = f"{output_dir}/siegfried_report_{date_str}.csv"
    json_output = f"{output_dir}/siegfried_report_{date_str}.json"
    
    print(f"=== Varredura Siegfried ===")
    print(f"Repositório: {repository_path}")
    print(f"Iniciando varredura...")
    
    # Executar Siegfried em formato CSV
    with open(csv_output, 'w') as f:
        subprocess.run(
            ['sf', '-csv', repository_path],
            stdout=f,
            check=True
        )
    
    print(f"Relatório CSV gerado: {csv_output}")
    
    # Executar Siegfried em formato JSON
    with open(json_output, 'w') as f:
        subprocess.run(
            ['sf', '-json', repository_path],
            stdout=f,
            check=True
        )
    
    print(f"Relatório JSON gerado: {json_output}")
    
    # Análise básica
    analyze_siegfried_report(csv_output)
    
    return csv_output, json_output

def analyze_siegfried_report(csv_file):
    """Analisa relatório do Siegfried"""
    
    formats = {}
    total_files = 0
    unidentified = 0
    
    with open(csv_file, 'r') as f:
        reader = csv.DictReader(f)
        
        for row in reader:
            total_files += 1
            
            fmt = row.get('format', 'UNKNOWN')
            
            if fmt == 'UNKNOWN' or not fmt:
                unidentified += 1
            else:
                formats[fmt] = formats.get(fmt, 0) + 1
    
    print(f"\n=== Estatísticas ===")
    print(f"Total de arquivos: {total_files}")
    print(f"Arquivos não identificados: {unidentified}")
    print(f"Formatos únicos: {len(formats)}")
    print(f"\nTop 10 formatos:")
    
    sorted_formats = sorted(formats.items(), key=lambda x: x[1], reverse=True)
    for fmt, count in sorted_formats[:10]:
        print(f"  {fmt}: {count}")
    
    # Salvar análise
    analysis = {
        'timestamp': datetime.now().isoformat(),
        'total_files': total_files,
        'unidentified': unidentified,
        'unique_formats': len(formats),
        'formats': formats
    }
    
    analysis_file = csv_file.replace('.csv', '_analysis.json')
    with open(analysis_file, 'w') as f:
        json.dump(analysis, f, indent=2)
    
    print(f"\nAnálise salva em: {analysis_file}")

if __name__ == "__main__":
    import sys
    
    if len(sys.argv) < 2:
        print("Uso: python scan_siegfried.py <caminho_repositorio>")
        sys.exit(1)
    
    repository = sys.argv[1]
    scan_with_siegfried(repository)

Recomendação

Opção 1 (Melhor): Atualizar para Java 21 e usar DROID

  • Mais completo e preciso
  • Mantém compatibilidade com PRONOM oficial
  • Interface gráfica disponível se necessário

Opção 2 (Alternativa): Usar Siegfried

  • Não requer Java
  • Mais rápido e leve
  • Usa mesmas assinaturas PRONOM
  • Perfeito para linha de comando

Execute os comandos de instalação do Java 21 e depois tente novamente o DROID!