Newsgroup: it.comp.os.linux.sys
Titolo: awk

All'interno di un tree di directory, devo ricercare tutti i link
simbolici presenti, è in ogni directory dove viene incontrato il
puntamento deve essere scritto in un file di testo deve essere presente
in quella posizione.
Ho fatto uno script del tipo:
find . -type l -exec ls -ald {} \;| awk '{printf "%s %s %s\n", $8, $9,
$10 }' > fielditesto
ma questo è sostanzialmente l'elenco di tutti i link simbolici.
Qualcuno a qualche idea?

 Qualcuno a qualche idea?
Prova a spiegare meglio cosa devi fare!
Saluti,
David
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFE//QZ5sXXcRsFI+cRAqeVAKCWYABjsjZvoQryZpCmi6AH3qUWpACfW2EB
VdmFW9xgyVsKi2KJIYEAsss=
=JBBj
-----END PGP SIGNATURE-----

si, giusto ho sbagliato l'output del link...
sostanzialmente, devo scorrere l'albero ed ogni volta che trovo il link
simbolico devo creare un file di testo con dentro il puntamento alla
dir.
Però deve essere fatto all'interno di un tree...
Esempio se ho un tree del tipo:
root
 apache
 webapplication
 altradirectory1
 altradirectory2
 altradirectory3,
e all'interno di  apache ad esempio, ho un link simbolico che punta ad
una directory che nè so..pippo, sotto apache devo creare un file
testo.lst che mi contiene i dati del link simbolico.
Questo deve essere ricorsivo, in modo che cosi, lanciandolo dalla root
nel momento che trova questa situazione crea questo file dove lo deve
creare.
Spero di aver spiegato bene .
Ciao e grazie David
David Paleino ha scritto:


 
Fammi capire quello che vuoi fare con un esempio pratico.
+ /
+-- /etc
+-- /var
+-- /home
+-- /test
+---- foo -> /var
+---- bar -> /etc
+---- buh -> /home
tu vuoi che dentro /test/ ci sia un file di testo (come lo vuoi chiamare
lo chiamiamo), che contenga le seguenti linee:
./foo -> /var
./bar -> /etc
./buh -> /home
?
Se è così... vediamo... uhm...
(è passata più di un'ora...! ed è uno script piccolissimo... ma, non
conoscendo find... :°D)
Questo dovrebbe andare... l'ho testato su un albero:
+ /temp
+-- /tmp
+-- /tmp2
+-- /tmp3
dentro /temp/tmp i file da linkare, e dentro tmp2 e tmp3 i link simbolici.
Ecco lo script:
#!/bin/bash
for dir in `find . -type d`
do
        for link in `find $dir \( ! -wholename $dir -prune \) -type l
- -exec ls -ald {} \; | awk '{print \$9":"\$10":"\$11}'`
        do
                echo $link | tr ":" " " >> $dir/testo
        done
done
C'è un brutto "hack" di mettere i ":" e poi sostituirli con uno spazio,
ma non avevo idea di come fare...
Saluti,
David
P.S.: quota meglio la prossima volta.
P.P.S.: forse dovresti provarlo su un tree un pò più complesso... :)
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFABuC5sXXcRsFI+cRAttUAJ9iz1A8Q5PbgZX4U56JnpCf4wfMVQCePpLb
ubba0OPgmmO7gWvVahRh3m0=
=O+t0
-----END PGP SIGNATURE-----

 ...
Quando l'output di ls non e' su console l'output 
avviene per default su una colonna singola e si 
perdono informazioni quali il colore, l'indicazione 
del tipo di file, ed il file a cui e' collegato il 
link simbolico.
Dovresti trovare un modo alternativo per ricavare 
questa informazione oppure smanettare con le
opzioni di ls.



uff ... ho dovuto leggere tutto il thread per capire cosa devi fare:
chiamiamo il file di destinazione "miofile"
prima rimuovi il file di destinazione, se esiste:
find -iname miofile -exec rm '{}' ';'
for  i in $(find -type d); do
  cd $i
  find . -mindepth 1 -maxdepth 1 -type l -exec ls -ald '{}' ';'| \
  awk -F":..." '{print $NF}' >>miofile
  cd - >/dev/null
done
bello eh ;) quando mi paghi?
-- 
echo onailimissaM | awk 'BEGIN { FS = "" }
{ for (i = NF; i >= 1; i-- )
  printf $i }'; echo

 
manca un backslash prima di un apice inverso.
A parte quello, credo che lui voglia una file in ciascuna directory,
contenente i link presenti in quella directory.
E' diverso.


 
Da testare:
--------------------------------------------------------------------
for dir in `find . -type d`
do
 for link in `find $dir \( ! -wholename $dir -prune \) -type l \
  - -exec ls -ald {} \; | awk '{print $9 " " $10 " " $11;}'`
 do
  echo $link >> $dir/testo
 done
done
--------------------------------------------------------------------
 Gio'
-- 
/*
 * SnB - Qualità informatica - 
http://www.snb.it
 */

 bello eh ;) quando mi paghi?
forse cosi' e' piu' adatto allo scopo?
for  i in $(find -type d); do
  cd $i
  find . -mindepth 1 -maxdepth 1 -type l -exec ls -ald '{}' ';'| \
  awk -F'./' '{print $NF}'
  cd - >/dev/null
done


  Gio'
David
P.S.: sempre da testare :D
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFAERx5sXXcRsFI+cRAk7rAJ4//SQDtsMer/Sl817qhiN7HHkKiACghepA
5JW/trGXfOPljZD1YSWItuA=
=zUPd
-----END PGP SIGNATURE-----

 (notare i doppi apici attorno all'esecuzione di find...)
io stavo notando i for, for, for annidati. Mi fanno girare la testa :P
Ad ogni modo, per l'awk finale e' sufficiente:
awk -F":..." '{print $NF}'
oppure
awk -F'./' '{print $NF}'
-- 


 awk -F'./' '{print $NF}'
Beh, come con find, awk lo utilizzo molto poco (non mi serve granché!)...
Mi studierò meglio awk la prossima volta ;)
David
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFAEX25sXXcRsFI+cRApt9AKCN1O4afgIymYC/OpMHe52+zMUxPACdHeSM
XVulk/zU+Oa4eFQp/2BJnBI=
=++yy
-----END PGP SIGNATURE-----

 Mi studierò meglio awk la prossima volta ;)
ti dico la verita': non ho mai visto sul NG uno script awk che rappresenti
almeno il 10% delle potenzialita' che awk possiede.
Anche io lo uso molto da ignorante.... la signature e' una stronzatina che
mi sono messo a fare una volta :)
ti consiglio questo:
http://docs.freebsd.org/info/gawk/gawk.pdf
inoltre, esiste pure un testo che spiega come fare programmazione socket
con gawk ;) ... non so se' e' una cosa che ha fini pratici, comunque spiega
come si possono fare dei server web con gawk.


 
http://docs.freebsd.org/info/gawk/gawk.pdf
mmhh .. questa e' una edizione veramente vecchia. Ce ne sono di piu
recenti. 
--> Da notare la collaborazione di R.M. Stallmann ;)


 done
Max_Adamo ha scritto:


 
ti sei incasinato un po' con copy and paste... c'e' ';', e <return> 
insieme, il "do" nella riga di sotto ;) ... e ...  il quote alla ehm,
ca$$odicane, ma per il resto va bene: e' la soluzione piu' concisa.
