Trovare links morti e file inutili con Bash

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

Sopra avevo postato il codice sbagliato, l'ho corretto.
per ora sono a questo punto:

Codice: Seleziona tutto

#!/bin/bash

sep_default="$IFS"
IFS='
'
echo 'Attendere verrà fatta una simulazione della rinomina dei file'
path='sito'
for i in $(find "$path" -type f); do 
nuovo_nome=$(echo "$i" | tr '[A-Z ]' '[a-z_]')
echo mv "$i" "$nuovo_nome" &>/dev/null
done	# richiede \n come IFS 


# inserisco i nomi dei file nuovi e vecchi in due array
# poi riordino gli array ed elimino i record doppi:
declare -a vecchi_nomi=("$(find "$path" -type f)")
vecchi_nomi_unici=($(sort -u <<< "${vecchi_nomi[*]}"))
# echo "${#vecchi_nomi_unici[@]}"	# conto gli elementi dell'array 1755

declare -a nuovi_nomi=("$(find "$path" -type f | tr '[ A-Z]' '[_a-z]')")
nuovi_nomi_unici=($(sort -u <<< "${nuovi_nomi[*]}"))
# echo "${#nuovi_nomi_unici[@]}"	# conto gli elementi dell'array 1755


# controllo che non ci siano file cancellati dalla rinomina
file_persi=$((${#vecchi_nomi_unici[@]} - ${#nuovi_nomi_unici[@]}))
if [[ "$file_persi" == 0 ]]; then
		echo 'Ok, la simulazione di rinomina non ha rilevato problemi'
	else
		echo "Attenzione rinominando i file, $file_persi di questi andrebbero persi"
fi

# reimposto il separatore di default
IFS="$sep_default"
exit 0
Mi è venuto in mente di fare una verifica con una simulazione, per ora ...
Finisco un lavoretto poi provo la sostituzione.
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Trovare links morti e file inutili con Bash

Messaggio da vaeVictis »

UbuNuovo, per impostare IFS a newline:

Codice: Seleziona tutto

IFS=$'\n'
A prescindere da questo, non ti serve cambiarli:

Codice: Seleziona tutto

vaevictis@HAL:~/Scrivania/foo$ ls
totale 0
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-22 18:51 fOO2 BaR2.txt
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-22 18:51 fOo1 bAr1.txt
vaevictis@HAL:~/Scrivania/foo$ find . -type f | while read filePath; do newPath=`echo $filePath | tr '[A-Z ]' '[a-z_]'` && mv "$filePath" $newPath; done
vaevictis@HAL:~/Scrivania/foo$ ls
totale 0
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-22 18:51 foo1_bar1.txt
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-22 18:51 foo2_bar2.txt
$newPath, nel comando mv non va neanche virgolettato, perché è di sicuro una stringa senza spazi :)

@melfnt
Che c'entra rinominare i file con avere tutto il loro contenuto maiuscolo e _ al posto degli spazi?
Non capisco.
Lui aveva il problema di uniformare i link a "tutte lettere minuscole nel nome".

Così... en passant... perché ho letto il messaggio in cui mi facevi notare questa cosa.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

@vae dopo oppure domani riguardo per bene quello che hai scritto, ora sono fuso.
Tra un'interruzione e l'altra alla fine ho fatto solo confusione.
Mi sarebbe venuto in mente un altro sitema, sono riuscito a costruire una regex che mi trova le immagini e una che mi trova le ancore, le ho messe insieme e mi è venuto fuori questo.

Codice: Seleziona tutto

grep -ioP '<(a href)?(img.*?src)?="\K(.*?)(?=".*?>)' pag.htm		ok così prendo immagini e ancore

grep -ioP '<(a href)?(img.*?src)?="\K(.*?)(?=".*?>)' sito/* > tutti_gli_url.txt
Guardando il risultato mi sono accorto che a volte lo spazio è scritto come spazio ' ', mentre altre volte è codificato con '%20' quindi un'altra difficoltà. Per fare quelle regex ci ho messo quasi un ora a vederla ora sembra scontata ma all'inizio mi prendeva altre parti dei tag che non volevo.
Il bello è che non mi ricordo più cosa volevo farci. :(
Ultima modifica di UbuNuovo il domenica 23 giugno 2013, 12:57, modificato 1 volta in totale.
Salva l'Ucraina! 🇺🇦
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: Trovare links morti e file inutili con Bash

Messaggio da melfnt »

@vaeVictis

È che con il tuo metodo (tr) un file del genere

Codice: Seleziona tutto

clicca <a href="Ciao MondO.html"> qui </a>
diventerebbe

Codice: Seleziona tutto

clicca_<a_href="ciao_mondo.html">_qui_</a>
mentre a lui serve così:

Codice: Seleziona tutto

clicca <a href="ciao_mondo.html"> qui </a>
Ovvero: solo la stringa "ciao mondo" va cambiata, il resto no.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

@ vae: ora non mi ci metto a provare ma dici che usando while con read si risolve il problema degli spazi.
Quindi la causa dipende solo dal ciclo for di come vengono assegnati i valori a 'i'"?
E per il problema che si presenta negli array? Esiste anche li un metodo semplice per superarlo?
altrimenti non ne vale la pena.

Il 'tr' va bene per rinominare i file ma ora che devo sostituire con '_' non solo lo spazio ma anche '%20' non è più adatto.

@melnt: secondo il mio principio iniziale avrei voluto ciclare i valori degli array nomi_ nuovi e vecchi nei "campi" di sostituzione di sed.
Con la regex che ho ffatto ora riesco a estrarre l'ndirizzo dei links e delle immagini puliti ovvero da:

Codice: Seleziona tutto

clicca <a href="ciao mondo.html"> qui </a>
estraggo la parte da cambiare pulita cioè

Codice: Seleziona tutto

ciao mondo.html
stessa cosa per le immagini.
Potrei quindi fare questi cambiamenti senza usare gli array... ma bo? Non so cosa sia meglio e ora non capisco un granché.
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Trovare links morti e file inutili con Bash

Messaggio da vaeVictis »

Una domanina... ma usare Python? Puoi fare il parsing di un documento HTML molto più facilmente che con bash.
Detto questo,
Quindi la causa dipende solo dal ciclo for di come vengono assegnati i valori a 'i'"?
dipende dal fatto che per usare l'output di find in un ciclo for, devi usare "bene" il comando find. E l'output (se controlli mettendolo in un array e contandone gli elemeni) "sfarfalla" (per dirla in soldoni).
C'è modo per risolvere, ma devi fare dei carpiati di sintassi (almeno in quei modi risolutivi che avevo provato io, prima di lasciare stare tutto e usare il ciclo while, che invece legge riga per riga l'output di find... e basta quotare le variabili con spazi.
E per il problema che si presenta negli array? Esiste anche li un metodo semplice per superarlo?
altrimenti non ne vale la pena.
Nel seguire la discussione ho fatto un po' di fatica, non capisco a cosa ti riferisci, scusami.

Se vuoi, fai un resoconto di quello che devi fare e rivediamo lo script con calma.

:ciao:

p.s.:
per la rinomina dei file, considera anche il comando rename:

Codice: Seleziona tutto

vaevictis@HAL:~/Scrivania/foo$ ls
totale 0
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-22 18:51 FOO1 BAR1.TXT
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-22 18:51 FOO2 BAR2.TXT
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-23 16:13 FoO%20BAr.TxT
vaevictis@HAL:~/Scrivania/foo$ rename 's/ /_/;s/%20/_/;y/[A-Z]/[a-z]/' *
vaevictis@HAL:~/Scrivania/foo$ ls
totale 0
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-22 18:51 foo1_bar1.txt
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-22 18:51 foo2_bar2.txt
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-23 16:13 foo_bar.txt
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

Ciao Vae, oggi volutamente non ho pensato a questo script, a volte mi fa bene pensare ad altro, poi quando ritorno sul lavoro abbandonato mi appare tutto più chiaro.
Per la rinomina non ho problemi.
Con while in effetti non si presenta il problema degli spazi, ho fatto delle prove.
Però si ripresenta il problema degli spazi negli array.

Codice: Seleziona tutto

#!/bin/bash
path='sito'
find "$path" -type f | while read filePath; do newPath=`echo $filePath | tr '[A-Z ]' '[a-z_]'` && echo mv "$filePath" $newPath; done # ok

# prova array
declare -a vecchi_nomi=("$(find "$path" -type f)")	# con virgolette o senza
echo "Numero elementi array senza modificare IFS: ${#vecchi_nomi[@]}"	# con IFS di default output: 0	NON VA BENE


# CON SEPARATORE MODIFICATO

sep_default="$IFS"
IFS='
'
declare -a vecchi_nomi=($(find "$path" -type f))	# array senza virgolette
echo "Numero elementi array con IFS modificato: ${#vecchi_nomi[@]}"		# con IFS modificato output: 7 OK



IFS="$sep_default"
La struttura è ... tra 5 minuti ti metto un link per scaricare una struttura minima di prova.
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Trovare links morti e file inutili con Bash

Messaggio da vaeVictis »

Se ho inteso bene il problema relativo all'array, prova così:

Codice: Seleziona tutto

vaevictis@HAL:~/Scrivania/foo$ ls
totale 0
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-22 18:51 FOO1 BAR1.TXT
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-22 18:51 FOO2 BAR2.TXT
-rw-r--r-- 1 vaevictis vaevictis 0 2013-06-23 18:17 FOO%20BaR.Txt
vaevictis@HAL:~/Scrivania/foo$ file_list=()
vaevictis@HAL:~/Scrivania/foo$ while IFS= read -d $'\0' -r filePath; do file_list[i++]="$filePath"; done < <(find -type f -print0)
vaevictis@HAL:~/Scrivania/foo$ echo ${file_list[0]}
./FOO1 BAR1.TXT
vaevictis@HAL:~/Scrivania/foo$ echo ${file_list[1]}
./FOO%20BaR.Txt
vaevictis@HAL:~/Scrivania/foo$ echo ${file_list[2]}
./FOO2 BAR2.TXT
(dopo il done, i due segni "minore" sono intervallati da uno spazio e non sono scritti uno appresso all'altro)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

Vae, son tornato da un matrimonio e ho visto la tua risposta... non mi puoi fare così, ora mi incuriosisci con quella sintassi dei '< <'.
Comunque mi si complicherebbe il codice, cambiando il separatore ho già tutto funzionante.
Nella struttura di prova ho sbagliato ad inserire il codice dello spazio, ho messo '20%' invece di '%20' pensavo all'iva al 20% : ). Ora nel link alla struttura di prova ho messo i file corretti.

Cerco di spiegarti meglio quello che vorrei fare.

Situazione di origine:
Ho tante pagine html con links ad altre pagine e ad immagini di cui ti faccio un esempio:

Codice: Seleziona tutto

bla bla guarda <a href="IndirIzzo Della Pagina.htm">questa</a>
bla bla guarda <a href="IndirIzzo%20Di%20Pagina%20Diversa.htm">quest'altra</a>
bla bla <img src="Immagine di Qualcosa.JpG">
e i file a cui si riferiscono i links sono:

Codice: Seleziona tutto

IndirIzzo Della Pagina.htm
IndirIzzo Di Pagina Diversa.htm
Immagine di Qualcosa.JpG
Situazione da ottenere:
Nomi ed estensioni dei file devono essere minuscoli e senza spazi, per quello vanno sostituiti gli spazi con gli underscore.
Gli indirizzi nei links devono coincidere con i nomi dei file corretti
quindi anche loro minuscoli e con gli spazi sostituiti da underscore

Codice: Seleziona tutto

bla bla guarda <a href="indirizzo_della_pagina.htm">questa</a>
bla bla guarda <a href="indirizzo_di_pagina_diversa.htm">quest'altra</a>
bla bla <img src="immagine_di_qualcosa.jpg">
i file a cui si riferiranno i links sono:

Codice: Seleziona tutto

indirizzo_della_pagina.htm
indirizzo_di_pagina_diversa.htm
immagine_di_qualcosa.jpg
Ho scritto il codice per rinominare in modo corretto tutti i files
Ho scritto il codice per avere in un array tutti i "vecchi nomi di file" e in un'altro array tutti i "nuovi_nomi_di_file_corretti".
In entrambi gli array, gli indirizzi sono ordinati e resi unici.
Ho già fatto un controllo per verificare che non siano stati eliminati file (eventualmente diventati con nome uguale dopo la rinomina).

Ora, a 'vecchi_file[0]' corrisponde 'nuovi_file[0]' e così via, per esempio (non guardare la sintassi):

Codice: Seleziona tutto

vecchi_file[0]=IndirIzzo Della Pagina.htm
nuovi_file[0]=indirizzo_della_pagina.htm
Avevo intenzione di fare la sostituzione con sed ciclando un array e mettendo nei campi di sostituzione:

Codice: Seleziona tutto

s/vecchi_file[$i]/nuovi_file[$i]/g		# sintassi semplificata per l'esempio 
Poi mi era venuto in mente di trovare un modo per fare la sostituzione sui file html sfruttando la regex:

Codice: Seleziona tutto

grep -ioP '<(a href)?(img.*?src)?="\K(.*?)(?=".*?>)' pag.htm
che mi manda in output gli indirizzi presenti nei tag '<a href"*"...>' e nei tag <img src="*"...> (prendo solo quanto indicato con '*')
Fatta questa e visti i risultati ho trovato alcuni spazi nei links codificati (giustamente) con '%20'
così sono entrato in confusione, la sostituzione mediante array non avrebbe più funzionato.
In realtà basterebbe fare prima la sostituzione di '%20' con '_' e il procedimento dovrebbe funzionare ugualmente, una cosa di questo genere:

Codice: Seleziona tutto

find $path -iname "*.htm" -exec sed 's/%20/ /g' {} \;   # edit lo spazio non l'underscore
Non ho ancora deciso che metodo usare.
Abbi pazienza per il lungo post, spero si sia capito quello che vorrei fare.
Ultima modifica di UbuNuovo il lunedì 24 giugno 2013, 15:16, modificato 1 volta in totale.
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Trovare links morti e file inutili con Bash

Messaggio da vaeVictis »

In merito alla sintassi di cui mi hai chiesto lumi, ho aperto questa discussione che ti segnalo in quanto potrebbe interessarti.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

Grazie vae! Appena ho un po di tempo lo leggo, ora sono incasinato.
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

Ieri dopo essermi quasi ripreso dalle deprimenti notizie datemi dal commercialista ho rimesso le mani su questo script.

Ho deciso di utilizzare due script separati, uno 'bonifica_file.bash' per la simulazione e bonifica reale dei nomi dei file ed uno '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 che serve per il rollover dei menù, essendo su un frame è facilmente modificabile a mano (e anzi quasi quasi levo il javascript e faccio il rollover su soli CSS).

Rispetto al codice già postato ho aggiunto nella regex l'esclusione degli URL esterni (individuabili da 'http://..') che diventa

Codice: Seleziona tutto

'<(a href)?(img.*?src)?="(?!http.*$)\K(.*?)(?=".*?>)'
, poi, facendo le prove su una copia del sito reale, ho avuto vari errori di 'sed', del tipo

Codice: Seleziona tutto

"sed: espressione -e #1, carattere 77: opzione di `s' sconosciuta"
così ho cambiato il separatore del comando di sostituzione da '/' a '&', quindi la sostituzione è

Codice: Seleziona tutto

 s&pattern_da_sostituire&sotituto&g
.
Sono rimasto stupito dalla velocità di esecuzione (nonostante qualche ridondanza nel codice), in circa 10 secondi si è bonificato 72MB di pagine HTML!

Ho fatto una pagina dove spiego il funzionamento e contenente l'archivio tar.gz con una struttura minimina per le prove e gli script che può essere scaricata da questa pagina.

Se volete fare le prove fatele sulla mia struttura minimale o su una copia dei vostri file originali, considerando che gli script sono in evoluzione e da migliorare potrebbero fare qualche catastrofe.

Qualsiasi suggerimento è ben accetto.

PS: Il programma file-roller non mi funziona più per la compressione mentre per decomprimere funge bene! Bo!? Per fortuna c'è il terminale!
Salva l'Ucraina! 🇺🇦
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: Trovare links morti e file inutili con Bash

Messaggio da melfnt »

PS: Il programma file-roller non mi funziona più per la compressione mentre per decomprimere funge bene! Bo!? Per fortuna c'è il terminale!
Reinstallalo:

Codice: Seleziona tutto

sudo apt-get install --reinstall file-roller
Per quanto riguarda i nomi dei file, dovresti ordinare l'array dei file vecchi (senza rimuovere i duplicati) e poi scorrerlo.
Se bonificando il nome di un file esso risulterà uguale al precedente, allora ci appendi un numero ( per esempio nome_file_$i ) con i=0 all'inizio, che aumenti di uno ogni volta che si trovano due nomi uguali e torni a 0 ogni volta che il nome cambia.

Se fai questo in entrambi gli script (bonifica_file e bonifica_url) non dovresti avere problemi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

Grazie melfnt, ho provato a disinstallare completamente file-roller e a reinstallarlo, ho installato ache tutti i programmi consigliati, ma la situazione non è cambiata.

Per la questione dei "file vecchi" il problema dei duplicati non dovrebbe sussistere semmai si va a verificare sui nomi dei file nuovi dove dopo la rimozione dei duplicati può portare alla sovrascrittura di un file con nome simile.
Per risolvere questa situazione mi ero fatto una funzione check che controlla se il file rinominato è già presente e nel caso aggiunge un suffisso. Devo solo vedere come fare per la modifica dell'url rinominato nei collegamenti.

Poi studierò meglio il tuo metodo che mi parrebbe semplice ... forse ho capito! Applicare direttamente un prefisso o suffisso al doppione? Devo verificare.

edit: Ora ho capito davvero! Si dovrebbe funzionare!
Salva l'Ucraina! 🇺🇦
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: Trovare links morti e file inutili con Bash

Messaggio da melfnt »

Sì, infatti, non riesco a spiegarmi molto bene. (male, perché domani ho l'orale della maturità)

Comunque, il principio è che se applichi lo stesso "algoritmo di rinominazione" in entrambi gli script, i file che puntano ad un doppione dopo la bonifica punteranno allo stesso doppione rinominato.

Per esempio, supponiamo che i file siano 3:

Codice: Seleziona tutto

file prova.html
file_prova.html
File prova.html
Dopo la bonifica, invece di essere rinominati tutti e tre file_prova.html, diventeranno:

Codice: Seleziona tutto

file_prova_1.html
file_prova_2.html
file_prova_3.html
Ora, supponiamo che in una pagina ci siano i seguenti link (nell'ordine)

Codice: Seleziona tutto

file prova.html #punta al primo file
File prova.html #punta al terzo file
file_prova.html #punta al secondo file
File prova.html #punta al terzo file
Se vengono ordinati nello stesso modo in cui sono stati ordinati i nomi dei file, allora verranno sostituiti con

Codice: Seleziona tutto

file_prova_1.html #punta al primo file
file_prova_3.html #punta al terzo file
file_prova_2.html #punta al secondo file
file_prova_3.html #punta al terzo file
Come vedi i file linkati sono gli stessi.
;)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

Non ti preoccupare, non ti eri spiegato male! Colpa mia l'avevo letto in furia, mi è bastato rileggerlo con più calma per capire.
Il metodo che dici con l'uso di un numero progressivo è un'ottima idea, grazie.
Domani cercherò di fare qualche prova.
In bocca al lupo per l'esame. :ciao:
Salva l'Ucraina! 🇺🇦
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da Vincenzo1968 »

Sto scrivendo una soluzione in C:

Immagine

Va bene così il rename dei file?
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da UbuNuovo »

Grazie.
Da quello che si vede va bene!
Hai considerato anche la rinomina degli url?
Salva l'Ucraina! 🇺🇦
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: Trovare links morti e file inutili con Bash

Messaggio da Vincenzo1968 »

Per la rinomina degli url sto scrivendo un piccolo parser html. Sono indeciso se utilizzare flex e bison o scriverne uno a mano(a discesa ricorsiva).

Se non ho capito male ti serve anche:

- Una lista di links che puntano a file inesistenti.
- Una lista di file esistenti che non sono referenziati in nessun file.

Giusto?
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti