Le miniguide di UbaWeb

Bonificare files e URL di pagine HTML

Premessa Torna su

03 Luglio 2012 - Linux 3.2.0-49-generic -Ubuntu 12.10 i686 GNU/Linux - Devo aggiornare un sito web statico vecchissimo, ospitato su server Windows, realizzato su frames, struttura di pagina basata su tabelle e senza CSS, quindi un sito"archeologico" 8-)!
Gli URL, nomi delle pagine e delle immagini contengono spesso spazi, inoltre maiuscole e minuscole nei links non corrispondono con quelle dei nomi dei files.
Visto che stò continuando a studiarmi lo scripting di shell con Bash, ho pensato di realizzare uno script che faccia le giuste modifiche ai file ed agli URL in modo automatico.
Avendo in mente come fare, ma non essendo certo un guru di Bash, ho aperto anche una discussione sul forum di Ubuntu per avere qualche consiglio.
Dopo vari giorni, ieri ho rimesso le mani sullo script e visto che sono arrivato a risultati decenti ho deciso di fare questa pagina su cui pubblicare gli sviluppi.

Il problema Torna su

Dovrei (sia nei nomi dei file collegati che negli URL delle ancore <a href="..."> come nei tags <img src="...">): sostituire tutti i caratteri spazio ' ' (e %20) con underscore '_' e anche sostituire tutti i caratteri maiuscoli con i rispettivi minuscoli; il tutto ricorsivamente all'interno della directory che contiene il sito.

Aggiornamento 14 luglio 2013 Torna su

Vincenzo1968, ha scritto un programma in C, "replacelinks", che crea una copia corretta del sito, con file e URL rinominati a dovere.
All'interno della nuova directory (nomeDelVecchioSito_NewSite) sono presenti due file di testo: DeadLinks.txt e UnreferencedFiles.txt.
Il primo contiene i riferimenti ai links "morti", uno per riga, nel formato:
path/pagina.htm numero_di_riga path/file_non_esistente.
Il secondo contiene, uno per riga, i percorsi ai files non collegati.
Io ho fatto un piccolo script di shell che sposta tutti i files elencati in UnreferencedFiles.txt, all'interno della una nuova directory eliminati; in modo da poter recuperare eventuali files eliminati erroneamente.
Per le istruzioni di compilazione ed utilizzo vedere la sezione replacelink (C).

Gli script Torna su

Ho deciso di dividere l'intero procedimento su due scripts: il primo, bonifica_file.bash, per la simulazione e la bonifica reale dei nomi dei file ed il secondo, bonifica_url.bash, per la bonifica degli URL nelle pagine html.
Il primo funziona bene ma è migliorabile, il secondo andrà sicuramente migliorato, per ora funziona abbastanza bene ma naturalmente non modifica gli URL: nei javascripts e nemmeno nel codice CSS della pagina.
Nel mio caso il sito non fa uso di CSS ed ha un solo javascript per il rollover dei menù, menù che essendo su un frame sono modificabili a mano molto velocemente.

AVVERTENZE: Ho fatto un archivio tar.gz e uno .zip, contenenti una struttura minimale per le prove e gli scripts, che può essere scaricata da questa pagina (più in basso, sezione Download).
Se volete fare le prove fatele sulla mia struttura minimale o su una copia dei vostri file; considerando che gli script sono in evoluzione e da migliorare, l'esecuzione di questi scripts potrebbe causare qualche catastrofe sui vostri files!

UTILIZZO: scaricato l'archivio dalla sezione Download di questa pagina, dopo averne estratto il contenuto si deve controllare che i files: bonifica_file.bash e bonifica_url.bash abbiano il permesso di esecuzione.
Per rendere eseguibili i files basta: aprire un terminale nella directory contenente gli scripts e digitare:
chmod +x bonifica_file.bash bonifica_url.bash

Per eseguire lo script che rinomina i file, si deve digitare nel terminale: ./bonifica_file.bash sito dove sito indica la directory contenente tutti i file da rinominare.
Avviato lo script verrà fatta una simulazione che verificherà che non siano sovrascritti file durante la rinomina;
se la simulazione viene passata senza problemi si otterrà una scritta di questo tipo:

Ok, la simulazione di rinomina non ha rilevato problemi 8-) Per rinominare realmente i file inserire il comando: ./bonifica_file.bash sito simula-no
In questo caso per rinominare gli URL basterà: copiare e incollare nel terminale l'ultima riga del messaggio: ./bonifica_file.bash sito simula-no e premere Invio... fine!
Avrei potuto utilizzare il comando 'source' per eseguire automaticamente la bonifica degli URL ma si sarebbe persa l'utilità di avere due script indipendenti.

Se la simulazione non viene passata verrà ripotata una scritta di questo tipo:
Attenzione rinominando i file, n di questi andrebbero persi! 8-( dove n indica il numero di files persi.
(questa condizione può verificarsi nel caso in cui si abbiano file con nomi quasi uguali es: 'file_1.htm' e 'file 1.htm'; dopo la rinomina, 'file_1.htm' verrebbe sovrascritto).
In una versione futura, in caso di "collisione" di nomi di file rinominati, il problema sarà risolto automaticamente; l'ho già fatto per un altro script!

Se si vuole ugualmente forzare la rinomina basterà inserire anche il secondo argomento simula-no; per esempio: ./bonifica_file.bash sito simula-no.

Replacelink (C) Torna su

Sompattando l'archivio scaricato dalla sezione Download, troveremo due files, il sorgente C del programma vero e proprio e uno script di shell che serve per cancellare gli irreferenziati.

Compilare il programma:
aprire il terminale nella directory contenete il file del sorgente C (es: repl.c)
eseguire nel terminale gcc -Wall -W -O3 repl.c -o replacelinks

UTILIZZO:
Dopo aver compilato il programma otterremo un file eseguibile con nome replacelinks;
per eseguirlo basta portarsi nella directory che lo contiene e digitare nel terminale:
time ./replacelinks percorso/alla/directory/del/sito seguito da Invio.
L'eseguibile può essere messo in una directory compresa in $PATH (variabile d'ambiente) in modo da poter eseguire il programma da qualsiasi posizione senza usare ./nomeEseguibile pathSito ma solo nomeEseguibile pathSito.
time naturalmente è opzionale, serve per vedere il tempo impiegato per completare l'elaborazione (nel mio caso circa mezzo secondo).

Una volta eseguito il programma, ipotizzando che la directory che contiene il sito si chiami "sito", vedremo che al suo stesso livello sarà creata una directory sito_NewSite, al suo interno ci sarà una copia del sito, corretta.

COSA CONTROLLARE?
All'interno di sito_NewSite aprire il file UnreferencedFiles.txt; conterrà l'elenco dei file che appaiono irreferenziati, cioè non richiamati da nessuna pagina; potrebbero esserci dei files che invece servono, come quelli in cgi-bin, files javascript, altri richiamati da CSS o da altri script.
Cancellare le righe che contengono files che non si vogliono eliminare, senza lasciare righe vuote.

Come cancellare automaticamente i files irreferenziati?
Se l'elenco dei files da cancellare è molto lungo conviene utilizzare il mio script cancella_irreferenziati.sh.
Per eseguirlo, il modo più semplice è metterlo nella directory contenente sito_NewSite, aprire un terminale nella stessa directory, digitare ./cancella_irreferenziati.sh e premere Invio.
Questo script in realtà non cancella alcun file ma lo sposta nella nuova directory eliminati per dar modo di recuperare files cancellati per errore.
Una volta provato approfonditamente il sito, quando si è sicuri che non serva alcun file eliminato, possiamo cancellare la directory eliminati.

Dove trovo l'elenco dei collegamenti interrotti?
Semplice! All'interno di sito_NewSite c'è il file DeadLinks.txt;
basta aprirlo! Ogni riga indica: il percorso della pagina, il numero di riga del collegamento interrotto e il file interessato.

Nel mio caso, gli unici interventi fatti a mano, per bonificare il sito, sono stati: cancellare le righe riguardanti files in cgi-bin, dall'elenco irreferenziati, e modificare un link che caricava un'immagine da una directory scritta erroneamente in maiuscolo.
Per questo programma possiamo ringraziare Vincenzo, per la sua competenza e per la sua pazienza.

download Torna su

In questa sezione manterrò aggiornata la versione degli scripts. (Quando ne avrò tempo e/o voglia!)

I nomi degli archivi compressi contengono la data di realizzazione degli script, per sapere se si ha già l'ultima versione, basta mettere il puntatore del mouse sopra il collegamento e leggere nella barra di stato la data del file, che è scritta in formato: AnnoMeseGiorno (aaaammgg) quindi un numero progressivo.
Buone prove! 8-)

Script di shell
Scarica la versione .tar.gz (script.sh 54,2KB) - scarica la versione .zip (script.sh 57,7KB)

Programma in C
Scarica il programma replacelink .tar.gz (ReplaceLinks.tar.gz 6,8KB)
Scarica il programma replacelink .zip (ReplaceLinks.zip 6,6KB)

Torna su
Sito realizzato da: UbaWeb di Giovanni Ubaldi

Licenza Creative Commons Tutto il contenuto di questo sito se non diversamente dichiarato è di Giovanni Ubaldi ed è distribuito con Licenza:

Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.