Repository 32bit  Forum
Repository 64bit  Wiki

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.

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda targzeta » mer set 28, 2011 12:54

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda targzeta » gio set 29, 2011 9:10

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda targzeta » gio set 29, 2011 12:36

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda targzeta » gio set 29, 2011 19:20

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 22 volte
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda ZeroUno » ven set 30, 2011 9:50

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
ZeroUno
Staff
Staff
 
Messaggi: 4398
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda targzeta » ven set 30, 2011 10:26

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda ZeroUno » ven set 30, 2011 11:08

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
ZeroUno
Staff
Staff
 
Messaggi: 4398
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda targzeta » ven set 30, 2011 11:30

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 16 volte
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda targzeta » ven set 30, 2011 13:03

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 32 volte
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda targzeta » ven set 30, 2011 20:23

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 16 volte
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda ZeroUno » sab ott 01, 2011 1:35

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: 4398
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda ZeroUno » sab ott 01, 2011 1:58

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
ZeroUno
Staff
Staff
 
Messaggi: 4398
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda targzeta » sab ott 01, 2011 9:46

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'.
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda Procopio » sab ott 01, 2011 11:21

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
Procopio
Linux 2.6
Linux 2.6
 
Messaggi: 701
Iscritto il: ven lug 29, 2011 10:50
Località: Torino
Nome Cognome: Matteo Micheletto Oddino
Kernel: 3.16.1-1-ARCH
Desktop: awesome 3.5.5-1
Distribuzione: ArchLinux

Re: find_external_SlackPkg_files.sh: uno script per maniaci

Messaggioda targzeta » sab ott 01, 2011 11:29

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

PrecedenteProssimo

Torna a Wikislacky

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti