Newsgroup: it.comp.os.linux.development
Titolo: bash

ho n directory dove all'interno vi sono file di vario tipo e devo settarli
tutti in chmod 0644
Come posso sfruttare la programmazione di bash onde evitare di entrare ed
uscire per tutte le directory e lanciare il comando?

 wrote in message
news:pan.2004.02.05....@gameprog.it...


 ha scritto nel messaggio
news:pan.2004.02.05....@gameprog.it...

Non credo ti serva shelle scripting:
# man chmod
[...]
OPTIONS
[...]
       -R, --recursive
              change files and directories recursively
[...]
Ciao,
Ema


Oppure "find" per un combiamento piu' selettivo. Find non e` facile
da usare le prime volte (e anche le seconde, le terze, le quarte...) ma
quando funge, funge.
Ciao,
-- 
       Roberto Divia`             Love at first sight is one of the greatest
       =============             labour-saving devices the world has ever seen.
Mailbox: C02110                 CERN-European Organization for Nuclear Research
E-mail: 
Robert...@cern.ch
           CH-1211 GENEVE 23, Switzerland

 terze, le quarte...) ma quando funge, funge.
Approposito di find  (gia' che ci sono approfitto,  ho postato apposta
;-) non sono mai riuscito a capire come impostare una pipe all'interno
di exec, ti faccio un esempio, voglio trovare tutti i file che abbiano
all'interno sia la parole vnc che la parola faq:
[1259][vale@damun:~]$ find VNC/ -type f -exec 'grep vnc {} | grep faq' \;
find: grep vnc VNC/FAQ/bestcomp.png | grep faq: No such file or directory
find: grep vnc VNC/FAQ/conn.png | grep faq: No such file or directory
[...]
[1300][vale@damun:~]$ find VNC/ -type f -exec grep vnc {} | grep faq \;
grep: ;: No such file or directory
find: manca l'argomento di `-exec'
[1300][vale@damun:~]$ 
Di solito risolvo questo problema greppando fuori dal find, qualcosa tipo:
find . -type f -exec pippo {} \; | grep blablabla
(so che ci sono modi  piu' eleganti e intelligenti dell'esempio che ho
fatto, che  e' risolvibile  con un  unico grep, ma  e' giusto  a scopo
esemplificativo)
TIA
-- 
Vuoi fare colpo su di lei con me?
Fai colpo su di lei con me! Fai colpo su di lei con me!
[Dr. Gonzo : Paura e delirio a Las Vegas]

 directory di file eseguibili)
appunto questo e' il problema!
se lo uso ricorsivamente anche le sottodirectory prenderanno i valori che
vorrei dare solamente ai files...
semplice no?

 ciao
grazie a volte c'e' chi legge e risponde senza capire il problema (:

 for i in ls -R; do chmod 644 $i; done:
ls è un po' un PITA per fargli capire che vuoi solo file/directory
find ./ -type f -exec chmod 644 {} \;
per chi chiedeva di q.che cosa del tipo (che non funziona):
find ./ -type f -exec "pippo | pluto" \;
credo che dipenda da:
Execute command; true if 0 status is returned.
Nel senso che l'uscita potrebbe essere ambigua.
ivan@stige:~> ivan@stige:~> echo zzz | tr z X | tr --sdsd xs;echo $?
bash: ivan@stige:~: command not found
tr: unrecognized option `--sdsd'
Try `tr --help' for more information.
1
ivan@stige:~> ivan@stige:~> echo zzz | tr --sdsd zX | tr z X;echo $?
bash: ivan@stige:~: command not found
tr: unrecognized option `--sdsd'
Try `tr --help' for more information.
0

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

chmod -R ?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFAIoXZa0UC8gMZpsoRAnkJAJsHV8zIPd1EGM7GEBssllwbq4HFtgCggKfM
LDTt9HntyCQRsARy6pr5oCg=
=Eai9
-----END PGP SIGNATURE-----
-- 
real name: Fabrizio Chiarello	| a Debian GNU/Linux | i'm in the could
nick:	   ponch		|     is running     | do better category
e-mail:	   
fchia...@inwind.it
	|    on Linux v2.4   | 		  - ponch
GnuPG Key: 0x0319A6CA / 3EED 38E0 87F7 C33E 2F18  AC59 6B45 02F2 0319 A6CA

 vorrei dare solamente ai files...
Infatti, e' quello a cui stavo puntando.
Devi solo combinare con chmod con  l'exec di find, vedi gli esempi che
ho  fatto  precedentemente.  In  particolare  quello  che suppongo  ti
manchi e' l'opzione -type del find.


 Nel senso che l'uscita potrebbe essere ambigua.
[ scusami, ma snippo che non ho capito ]
L'esempio che avevo  fatto aveva comandi che uscivano  con exit status
0, guarda:
[2125][vale@damun:/bank/VEDERE]$ mkdir test
[2125][vale@damun:/bank/VEDERE]$ cd test/
[2125][vale@damun:/bank/VEDERE/test]$ echo ciao bello > pippo
[2125][vale@damun:/bank/VEDERE/test]$ find . -type f
./pippo
[2125][vale@damun:/bank/VEDERE/test]$ find . -type f -exec grep ciao {} \;
ciao bello
[2126][vale@damun:/bank/VEDERE/test]$ grep ciao pippo && echo $?
ciao bello
0
[2126][vale@damun:/bank/VEDERE/test]$ find . -type f -exec \
	"grep ciao {} | grep bello" \;
find: grep ciao ./pippo | grep bello: No such file or directory
[2126][vale@damun:/bank/VEDERE/test]$
Qui sia  grep ciao pippo che grep  ciao pippo | grep  bello danno exit
status 0.


 find: grep ciao ./pippo | grep bello: No such file or directory
prende tutto quello che c'è tra virgolette e lo passa a un exec() che
ovviamente si lamenta visto che il comando "grep ciao ./pippo | grep
bello" non esiste.
Comunque... puoi controllare nei sorci di find ;) Io sono pigro.
un workaround è quello di scriversi uno script bash da passare a find.