Newsgroup: it.comp.os.linux.sys
Titolo: Strano comportamento di find -exec

Quesito di scripting avanzato, sicuramente c'è una spiegazione logica ma 
sinceramente non mi sovviene.
$ mkdir -p prova/{a,b,c}
$ cd prova
$ touch a/a
$ touch b/b
$ touch c/c
$ find . -type f -exec dirname {} \;
./c
./b
./a
fin qui tutto ok.
 find . -type f -exec echo $(dirname {}) \;
.
.
.
WTF? perchè succede questo? se uso basename mi ritorna tutto il percorso, 
nome del file completo. Sembra che non riescano a capire che è un file e non 
una directory.
Però il valore di {} viene espanso correttamente dato che
ind . -type f -exec echo $(echo {}) \;
./c/c
./b/b
./a/a
Bel mistero per me. È una feature? E perchè esiste? e come risolvo il mio 
problema?
-- 
Vide

 e come risolvo il mio problema?
Fai in modo che {} appaia da solo:
find . -type f -exec sh -c 'echo "$(dirname "$1")"' sh {} \;
che a sua volta ovviamente e' lo stesso che fare
find . -type f -exec sh -c 'dirname "$1"' sh {} \;
ma a questo punto puoi fare direttamente come facevi nel primo esempio, che
era well defined perche' {} era da solo :
find . -type f -exec dirname {} \;
(il tutto per dire che, anche se penso di aver capito il problema, l'esempio
non era proprio dei migliori :))

 l'esempio non era proprio dei migliori :))
l'echo è un esempio, in realtà devo ricreare la struttura delle directory in 
un host remoto con ssh (e no, scp -r non mi va bene perchè devo creare solo 
alcune delle directory, quelle che contengono file che combaciano col find). 
Provo col trucco dell'sh e $1.
Grazie mille.
-- 
Vide

 Provo col trucco dell'sh e $1.
Ok, funge perfettamente.
Fra te e mailand potreste scrivere una bibbia di bash :) Per curiosità, da 
dove hai attinto tutte queste informazioni su bash? Solo dalle manpges o c'è 
magari qualche libro che potresti consigliare? No perchè io mi son comprato 
"Mastering UNIX Shell Scripting" per colmare un po' di lacune però mi ha 
deluso abbastanza come libro, e sto cercando altro che faccia più al caso 
mio.
-- 
Vide

Vide wrote:

Onestamente, non mi sento di consigliare un libro specifico. In realta' io 
ho sempre usato molto le risorse che si trovano online, ad esempio la 
"advanced bash scripting guide" mi pare buona, anche se un po' frammentaria. 
Inoltre, posso consigliare la lettura degli standard, e mailing list e/o 
newsgroup relativi (ad esempio la mailing list dell'Austin Group dove si 
discute dello standard POSIX, la mailing list bug-bash o il newsgroup 
comp.unix.shell). Anche solo lurkando si ottengono molte informazioni.

Marco wrote:
Ops, ho usato per sbaglio l'account del computer dell'ufficio.

 Fra te e mailand potreste scrivere una bibbia di bash :) 
Forse il nuovo testamento, perché la bibbia l'hanno già
scritta, è l'advanced bash scripting.
http://www.pluto.it/files/ildp/guide/abs/index.html
-- 
           |Save our planet!
    Ciao   |Save wildlife!
   roberto |For your E-MAIL use ONLY recycled Bytes  !!
           |roberto poggi   
rpo...@softhome.net

 Ok, funge perfettamente.
Ovviamente se cio' che devi fare e' un po' complesso sh -c diventa scomodo, 
quindi puoi fare
... -exec script.sh {} \;
e metti tutto in script.sh (e se possibile, fai in modo che sia progettato 
per funzionare correttamente anche se si usa "+" per terminare l'exec 
anziche' il \; ).