find_external_SlackPkg_files.sh: uno script per maniaci

Usate questo forum per proporre nuovi articoli, creare gruppi di lavoro, segnalare problemi, collaborare in genere al progetto Wikislacky.

Moderatore: Staff

Regole del forum
1) Citare l'eventuale nome e link dell'articolo della wiki.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da targzeta »

Aggiornato lo script. Sono passato a sort+comm, effettivamente l'esecuzione è migliorata di moltissimissimo. Il nuovo script e il vecchio mi hanno dato gli stessi identici output. Quindi ora rimane solo da sistemare il problema con i link ed eventualmente fare un post-processo dei dati.

Con questo metodo si è anche risolto il problema con il comando '['.

Fatemi sapere,
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da targzeta »

Ecco i nuovi dati. Li ho fatti a PC appena avviato, quindi senza l'ausilio dell'eventuale cache.

Codice: Seleziona tutto

file trovati e installati:
 109620  109659 4807338 found_files.s
 120551  126501 5011788 installed_files.s
 230171  236160 9819126 totale

tempo find:
real    0m23.800s
user    0m1.050s
sys     0m0.910s

tempo sort dei due file:
real    0m0.920s
user    0m1.190s
sys     0m0.080s

tempo comm:
real    0m0.335s
user    0m0.300s
sys     0m0.000s
Non c'è proprio paragone, in una trentina di secondi ho gli stessi risultati che prima ottenevo in quasi mezz'ora.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da targzeta »

Sto pensando a come risolvere il problema dei link alle directory. Ci sono almeno tre modi:
  • gestire solo alcuni casi particolari e noti
  • gestire solo i casi particolari creati dal pacchetto aaa_base
  • cercare di fare una cosa generica e che vale sempre
I casi noti sono:

Codice: Seleziona tutto

/usr/share/{doc,info,man,pkgconfig}
I casi particolari gestiti da aaa_base dipende appunto da aaa_base, ma di solito comprende:

Codice: Seleziona tutto

/usr/share/{doc,info,man}
più qualcos'altro (si noti l'assenza di pkgconfig).

Se però si vuole fare qualcosa di più generico si dovrebbero controllare tutti i link simbolici creati dai vari pacchetti. La lista dei link simbolici va comunque creata, però se vogliamo implementare questo algoritmo si deve fare un ciclo del tipo:

Codice: Seleziona tutto

for file in $(<symbolic_links); do [ -d $file ] && reapl_path=$(readlink -m $file); done
c'è da dire che:
  • sul mio PC per fare tutto questo ciclo ci mette meno di un secondo e quindi mi sembra una soluzione ancora accettabile. Però il mio PC, come si vede anche dal numero di file trovati da find, è un sistema abbastanza minimale.
  • questi controlli sono fatti dopo la 'find' e quindi buona parte dei dati sugli inode, se non tutti, sono ancora in cache.
Suggerimenti?
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da targzeta »

Ok, ho:
  • migliorato la ricerca dei link simbolici. Questo evita il problema dei file bash e altri che non venivano trovati.
  • tramite un analisi post-processo ora:
    • ho risolto il problema dei link simbolici a directory (usando il 'for' di cui al post precedente).
    • faccio la prune di tutto l'albero di directory lasciando solo la directory madre.
Allego qui una RC dello script, non è molto commentato (è una RC!!!) per chi volesse fare da beta tester. In particolare mi servirebbe:
  • una 'diff' tra i due output forniti dallo script attuale e dall'RC.
  • la differenza di performace ritornata dal comando 'time'. In questo caso però bisognerebbe eseguire il comando due volte e prendere i tempi della seconda volta perché altrimenti il risultato è sfalsato (la prima find impiega molto più tempo).
Consiglio di usare almeno questo file di filtraggio '~/.find_external_SlackPkg_files':

Codice: Seleziona tutto

/usr/share/fonts/*/fonts.dir           mkfontdir
/usr/share/fonts/*/fonts.scale         mkfontscale
/usr/share/fonts/*/encodings.dir       mkfontdir
/home
/mnt
/opt
/tmp
/usr/share/mime                        update-mime-database
/var/cache/fontconfig                  fc-cache
/var/cache/ldconfig                    ldconfig
/var/tmp/kdecache-*                    kde-mv
Grazie a chiunque volesse contribuire,
Emanuele
Allegati
find_external_SlackPkg_files.new.sh
RC1 del nuovo script
(8.06 KiB) Scaricato 250 volte
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da ZeroUno »

C'è qualche problema nelle due sed finali. Mi ci hanno impiegato 8 minuti l'una e includevano anche ls /opt (che è tra gli exclude path).
La prima sed ha una espressione da 79000 caratteri mentre la seconda è di 91000.

Comunque l'output finale è sceso da 200000 righe 3000 righe ;-)
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da targzeta »

Sisi, ci ho pensato un po' ed effettivamente non "mi garbano". Inoltre in teoria non funzionerebbero lo stesso per via dei link multipli alla stessa directory. Vedo di fare qualcosa di meglio è più veloce. Ho un'idea ma devo vedere come si comporta.

Ma quei 3000 percorsi sono corretti, sono tutti percorsi esterni? Come mai così tanti? Io ne ho si è no una 20 di righe di output.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da ZeroUno »

spina ha scritto:Sisi, ci ho pensato un po' ed effettivamente non "mi garbano". Inoltre in teoria non funzionerebbero lo stesso per via dei link multipli alla stessa directory. Vedo di fare qualcosa di meglio è più veloce. Ho un'idea ma devo vedere come si comporta.
in quella sed togli quello che sta negli exclude path e stai a posto, credo
Ma quei 3000 percorsi sono corretti, sono tutti percorsi esterni? Come mai così tanti? Io ne ho si è no una 20 di righe di output.
Sembrerebbe che siano corretti.
Ti ricordo che tu hai un sistema minimale. Io una installazione completa della 13.1, continuamente aggiornata a current con slackpkg (che lascia diversi file di conf .orig), più diversi pacchetti slacky particolari (in particolare le compat32-library che ha la lib/incoming che chiaramente non è gestita dallo script), più programmi installati non pacchettizzati (anche parecchia roba da cpan o da pacchetti proprietari). Altre cose che si potrebbero mettere negli exclude file e poche cose che non ci dovrebbero stare.


Sarebbe opportuno che
1) l'output venisse sparato direttamente in un file anzichè in standard output.
2) in coda si aggiungesse l'elenco degli exclude path
Cosa bella sarebbe anche che a fianco delle directory (e anche degli exclude path) dal momento che è stato tranciato il contenuto venisse almeno mostrato il numero di file al suo interno.

Io intanto per debug ho tolto gli rm e rinominato i due temp_output in temp_output.1 e .2 (idem per temp_output.s).


Matteo
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da targzeta »

ZeroUno ha scritto:Sarebbe opportuno che
1) l'output venisse sparato direttamente in un file anzichè in standard output.
dai, questo no. Se uno vuole un '> file' non ci mette niente a farlo. Quando io eseguo lo script, in genere analizzo l'output. Ora, a me sono poche righe, ma anche un '| more' non ci vuole niente a farlo.
ZeroUno ha scritto:2) in coda si aggiungesse l'elenco degli exclude path
Lo script ha una opzione '-f' che mostra i path filtrati ed esce. Con '-h' ti mostra l'help (sto pensando di gestire anche '--help').
ZeroUno ha scritto:Cosa bella sarebbe anche che a fianco delle directory (e anche degli exclude path) dal momento che è stato tranciato il contenuto venisse almeno mostrato il numero di file al suo interno.
Ecco, lo sapevo io. Prima mi chiedi di troncare il contenuto delle directory e poi mi chiedi di mostrare il numero di file :). Per quelli fatti a run-time è facile, però per quelli esclusi no, mi costringi ha fare un find anche negli exclude path. Tieni conto che gli exclude path servono anche a velocizzare lo script saltando alberi di directory.
ZeroUno ha scritto:Io intanto per debug ho tolto gli rm e rinominato i due temp_output in temp_output.1 e .2 (idem per temp_output.s).
Ti allego l'ultimo RC su cui sto lavorando. Mi dici com'è messo questo con i tempi? Ho dovuto modificare l'algoritmo perché c'erano errori logici. Se due link simbolici puntano alla stessa directory (e succede) allora lo script sed ha nella sua linea di comando due RE uguali ma che fanno cose diverse. Questo vuol dire che non controllo tutti i link. Quest'ultimo RC dovrebbe essere corretto, però non so quanto ci mette per eseguirlo, a me il tutto è molto rapido.

Emanuele
Allegati
find_external_SlackPkg_files.rc3.sh
RC3 dello script
(8.07 KiB) Scaricato 233 volte
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da targzeta »

Ho visto che la RC3 è stata scaricata. Allego quindi la RC5, quella che probabilmente sarà la finale. Il controllo dei link simbolici è veramente palloso, io poi vorrei sapere perché i pacchetti ufficiali installano i file sotto link simbolici. Pensavo che almeno il team di sviluppo della Slackware avesse una sua linea di gestione delle directory.

Emanuele
Allegati
find_external_SlackPkg_files.rc5.sh
RC5 dello script
(8.18 KiB) Scaricato 367 volte
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da targzeta »

Questa RC invece è una prova per vedere se è più veloce fare 'comm | awk + comm' ma con la prima comm che manda meno dati a awk oppure fare un'unica 'comm | awk' ma con la comm che manda molti più dati da analizzare ad awk. Pura statistica, a me risulta più veloce la seconda.

Quale accendiamo?
Emanuele
Allegati
find_external_SlackPkg_files.rc6.sh
RC6 dello script
(8.22 KiB) Scaricato 246 volte
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da ZeroUno »

non ero io ad averli scaricati :-D.
Li tiro giù e ti dico.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da ZeroUno »

conteggio effettuato al secondo lancio (il primo lancio la find ha impiegato un minuto c.a.)

Codice: Seleziona tutto

# time bash find_external_SlackPkg_files.rc3.sh > rc3.out
comm: file 1 is not in sorted order
comm: file 1 is not in sorted order

real    0m21.413s
user    0m15.698s
sys     0m6.151s

# time bash find_external_SlackPkg_files.rc5.sh > rc5.out
comm: file 1 is not in sorted order
comm: file 1 is not in sorted order

real    0m17.839s
user    0m11.865s
sys     0m6.079s

# time bash find_external_SlackPkg_files.rc6.sh > rc6.out
comm: file 1 is not in sorted order
comm: file 1 is not in sorted order

real    0m17.408s
user    0m11.689s
sys     0m5.880s
perchè quei due warning?

i tre out sono identici, ma diversi da quello di ieri (al netto di file aggiunti oggi), che effettivamente era bacato. dosemu dava un po' di fastidio.
in > l'output di ieri
in < quello di ora

Codice: Seleziona tutto

< /etc/ppp/peers/tmpwvdial
---
> /etc/ppp/peers/usr/share/dosemu/drive_z/tmpwvdial
165c171
< /etc/ppp/tmpoptions
---
> /etc/ppp/usr/share/dosemu/drive_z/tmpoptions
512,513d517
< /etc/tmpresolv.conf
< /etc/tmpwvdial.conf
519a524,525
> /etc/usr/share/dosemu/drive_z/tmpresolv.conf
> /etc/usr/share/dosemu/drive_z/tmpwvdial.conf
537d542
< /etc/wvdial.conf
662,663c667,668
< /usr/X11R6.bak/
< /usr/X11R6/
---
> /usr/X11R6R6.bak/
> /usr/X11R6R6/
2161d2164
< /var/spool/cron/cron.F79hxl/
3118,3119c3120,3121
< /var/spool/cups/tmp/gs_JCqGr5
< /var/spool/cups/tmp/gs_wA2RsW
---
> /var/spool/cups/usr/share/dosemu/drive_z/tmp/gs_WiGgZ0
> /var/spool/cups/usr/share/dosemu/drive_z/tmp/gs_sY3t08
Altre parti variano solamente per l'ordine.

Però adesso devo rilanciarlo senza escludere la /opt ma lì ho sia roba pacchettizzata sia roba non pacchettizzata.
# find /opt/|wc -l
72633
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da targzeta »

Diciamo che tra l'rc5 e l'rc6 vince ancora l'rc6. Tu come la vedi, 17 secondi sono accettabili? Ho chiesto anche a Procopio di farmi una prova analoga, vediamo se ci riporta qualcosa anche lui.

Anche l'output, se non ho capito male, sembra migliorato ulteriormente, no? La differenza sembra che ieri non ripristinava i link, mentre quelli di oggi si. Ad esempio:

Codice: Seleziona tutto

512,513d517
< /etc/tmpresolv.conf
< /etc/tmpwvdial.conf
519a524,525
> /etc/usr/share/dosemu/drive_z/tmpresolv.conf
> /etc/usr/share/dosemu/drive_z/tmpwvdial.conf
Ma questo file:

Codice: Seleziona tutto

537d542
< /etc/wvdial.conf
da quale dei due viene trovato. L'output suggerisce che gli script di oggi non lo trovano mentre quello di ieri sì, o il contrario? Il file di cron credo sia normale che ci sia solo in uno, dovrebbe essere un job.

Dobbiamo trovare il motivo di quei warning di comm, probabilmente se l'input fosse ordinato ci impiegherebbe meno (voglio passare '--nocheck-order' a comm). Dovrebbe darlo il comm della riga 252 dell'RC6. Fai una prova, mettici prima di quella righa, questo:

Codice: Seleziona tutto

echo "$real_path"
e dopo un check:

Codice: Seleziona tutto

(( $? != 0 )) && exit
quando lo script termina, controlla il file subset.s.

Grazie mille davvero,
Emanuele

P.S. Per curiosità, ma lo script attuale (occhio che l'ho modificato ieri) quanto ci mette? Anche se è ovvio che tira fuori un sacco di file in più.

:edit: Forse ho capito. Alla riga 248, sempre dell'RC6, sostituisci:

Codice: Seleziona tutto

sed -n -i "/${real_path////\\/}\//{s;${real_path}/;${file}/;;w subset.s
con:

Codice: Seleziona tutto

sed -n -i "/^${real_path////\\/}\//{s;${real_path}/;${file}/;;w subset.s
(nota il '^' davanti a '${real_path'.
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
Procopio
Linux 3.x
Linux 3.x
Messaggi: 844
Iscritto il: ven 29 lug 2011, 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.2
Kernel: 4.4.14
Desktop: Awesome
Località: Torino

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da Procopio »

ecco i tempi sui tre script: l'originale, rc5 e rc6. Lo script originale sul mio sistema trova 5.489 files, l'ho eseguito da root.

Codice: Seleziona tutto

.

real    0m0.033s
user    0m0.000s
sys     0m0.002s

.rc5.

real    0m0.003s
user    0m0.000s
sys     0m0.002s

.rc6.

real    0m0.002s
user    0m0.001s
sys     0m0.001s

questi due comandi non restituiscono nulla entrambi:

Codice: Seleziona tutto

root@darkstar:/tmp# diff find. find.rc5.
root@darkstar:/tmp# diff find.rc5. find.rc6.
root@darkstar:/tmp#


se però li scrivo interi restituiscono un bel po di roba:)

Codice: Seleziona tutto

root@darkstar:/tmp# diff find_external_SlackPkg_files.sh find_external_SlackPkg_files.rc5.sh 
168c168
< _check_extern_program comm find mktemp rm sed sort uniq
---
> _check_extern_program awk comm find mktemp readlink rm sed sort uniq
178c178
<           exit
---
>           exit 0
219c219
< find / -mindepth 1 \( $path_to_prune \) -prune -o -print > found_files
---
> find / -mindepth 1 \( $path_to_prune \) -prune -o \( -type d -printf "%p/\n" \) -o -print | sort >  found_files.s
226d225
< # - eliminare lo slash finale delle directory (find non lo inserisce)
228c227
< sed -sn '/^\.\//b print;d;:print n;/^install\//{n;b print};s/^/\//;s/\/$//;p;/\.new$/{s/\.new$//;p};b print' /var/log/packages/* > installed_files
---
> sed -s -n '/^\.\//b print;d;:print n;/^install\//{n;b print};s/^/\//;p;/\.new$/{s/\.new$//;p};b print' /var/log/packages/* > installed_files
231c230,231
< sed -n '/ cd.*; ln /{s/ \+/ /g;s/^ *//;s;\([^ ]* \)\{2\}\([^ ]*\) \([^ ]* \)\{4\}\([^ ]*\) .*;/\2/\4;p;}' /var/log/scripts/* >> installed_files
---
> awk '/^[^#]* cd .*; *ln /{sub(/\/$/,"",$3); if ( match($7,/^\//) ) print $7; if ( $8 == "." ) { sub(/\/$/,"",$7); sub(/.*\//,"/",$7); print "/" $3 $7} else print "/"$3 "/" $8}' /var/log/scripts/* | sort | uniq > symbolic_links.s
> cat symbolic_links.s >> installed_files
240d239
< sort found_files > found_files.s
242c241,263
< comm -23 found_files.s installed_files.s
---
> comm -23 found_files.s installed_files.s | awk 'BEGIN { row = "" }{ if ( row == "" || ! match(row, "/$") || ! match($0, "^" row) ) { print $0; row = $0 } }' > temp_output
> 
> comm -13 found_files.s installed_files.s > not_found_files.s
> for file in $(<symbolic_links.s)
> do
>     if [ -h $file -a -d $file ]
>     then
>       real_path=$(readlink -m $file)
>       sed -n -i "/${real_path////\\/}\//{s;${real_path}/;${file}/;;w subset.s
>                                              ;d};p;" temp_output
>       if [ -s subset.s ]
>       then
>           comm -23 subset.s not_found_files.s > subset.tmp
>           if [ -s subset.tmp ]
>           then
>               sed -i "/${file////\\/}/s;$file;$real_path;;" subset.tmp
>               cat subset.tmp >> temp_output
>           fi
>       fi
>     fi
> done
> 
> sort temp_output

Codice: Seleziona tutto

root@darkstar:/tmp# diff find_external_SlackPkg_files.rc5.sh find_external_SlackPkg_files.rc6.sh 
241c241
< comm -23 found_files.s installed_files.s | awk 'BEGIN { row = "" }{ if ( row == "" || ! match(row, "/$") || ! match($0, "^" row) ) { print $0; row = $0 } }' > temp_output
---
> comm -3 --output-delimiter=$'\t' found_files.s installed_files.s | awk -F '\t' 'BEGIN { row = "" }{ if ( match($0, "^\t") ) { print $2 >> "not_found_files.s" } else { if ( row == "" || ! match(row, "/$") || ! match($0, "^" row) ) { print $0; row = $0 } } }' > temp_output
243d242
< comm -13 found_files.s installed_files.s > not_found_files.s

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggio da targzeta »

Procopio ha scritto:ecco i tempi sui tre script: l'originale, rc5 e rc6. Lo script originale sul mio sistema trova 5.489 files, l'ho eseguito da root.

Codice: Seleziona tutto

.

real    0m0.033s
user    0m0.000s
sys     0m0.002s

.rc5.

real    0m0.003s
user    0m0.000s
sys     0m0.002s

.rc6.

real    0m0.002s
user    0m0.001s
sys     0m0.001s

questi due comandi non restituiscono nulla entrambi:

Codice: Seleziona tutto

root@darkstar:/tmp# diff find. find.rc5.
root@darkstar:/tmp# diff find.rc5. find.rc6.
root@darkstar:/tmp#
C'è qualcosa che non va. I tempi sono troppo bassi ed il primo diff dovrebbe restituire qualcosa. Sei sicuro che i file 'find.rc?.' contengano righe? Secondo me è successo qualche errore durante l'invocazione.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Rispondi