Newsgroup: it.comp.macintosh
Titolo: [Terminale] Problemi con find e xargs

Premetto che uso Tiger e bash come shell.
Seguendo il libro di D: Taylor su Unix per Terminale
http://www.englishbooks.it/BUS/0596009151/Learning_Unix_for_Mac_OS_X_Tiger.htm
talvolta non riesco a ottenere i risultati promessi dall’autore, tipo:
find ~ -iname "*.htm" -print
mi dà correttamente tutti i file con estensione .htm
ma
find ~ -iname "*.htm" -print | du –h
fa vedere tutti i file della home e mi restituisce 11G, cioè la dimensione
della mia home, anziché la somma: cosa c’entra?
Invece:
find ~ -iname "*.htm" -print0 | xargs -0 du
questo funziona è dà la dimensione vicino ai file, ma se scrivo
Questo funziona: sudo find / -iname "*.mp3" -print0 | xargs -0 du –ckh
mi dà tutta la lista dei file che eviterei: vorrei solo il totale! Ho tolto
l’opzione “-s” dal du ma non basta. Perché?
Questi alias generici invece non trovano nulla:
alias quanto='sudo find / -iname "*!:1*" -print0 | xargs -0 du -ckh'
alias quantoh="find ~ -iname "*!:1*" -print0 | xargs -0 du -ckh"
Il Mac gira, gira (lo vedo facendo top su una nuova shell) ma poi non trova
nulla. Dov’è l’errore? Qualcuno sa correggerli?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Seguendo il libro di D: Taylor su Unix per Terminale
Per la mia ridotta esperienza ho già notato che alcune implementazioni
di bash sono differenti da Unix a Unix (e su MacOS mancano alcuni
comandi, o viceversa).
-- 
E adesso anche quando piove,
lo vedi sempre con le spalle al sole,
con un canestro di parole nuove
calpestare nuove aiuole.

 Ho tolto l'opzione -s dal du ma non basta. Perché?
Perché "du" funziona così: per ogni argomento passato, mostra una riga
con il nome dell'argomento e l'utilizzazione su disco.
Se ti interessa solo il totale, puoi aggiungere in fondo
| grep total
Per quanto riguarda gli alias, non conosco la sintassi di bash (uso
tcsh).
-- 
.: Jazzman :.
"Prendere per il culo era facile, il difficile era esserlo di fino"
                                                  (R.Bounty su ivd)

 Eh?? Che c'entrano "i comandi" (eseguibili) con la shell?
Ad esempio su freeBSD cambia la configurazione di default del prompt,
per dirne una, ma principalmente mi riferivo agli eseguibili.


 sua implementazione e dalla sua configurazione.
Gli stessi sono gli stessi (ma va?), ma alcuni mancano (basti pensare al
sudo) sull'una o l'altra piattaforma.


 tcsh).
Speriamo che qualcun altro mi aiuti, perché desidero mettere l'alias
generico nel file .profile della home e battere " quanto .doc " e sapere,
magari solo il totale di quanto pesano tutti i .doc del filesystem e quantoh
per limitare la ricerca alla home senza sudo. Tra l'altro mi sembra (ora
davanti ho win e non posso verificare) che i comandi di per sé
funzionassero, ma che Terminale non li riconoscesse una volta messi in
.profile. Questo mi dà da pensare, ma non so come risolverlo...
Grazie ancora!


 pensare al sudo) sull'una o l'altra piattaforma.
Su quale S.O. *nix manca il "sudo"?


).
E' chiaro?


 Su quale S.O. *nix manca il "sudo"?
Su freeBSD c'č solo "su".


 Su quale S.O. *nix manca il "sudo"?
A me è capitato, una delle prime versioni di Linux che provai, verso
febbraio-marzo, mi sembra fosse una delle più User-Friendly, forse SuSe.
Ma potrei sbagliarmi, la SuSe è la mia vittima preferita quando devo
parlare male di qualche Linux :)
-- 
Le formiche non sono fatte per servire le cavallette.

 Chiarissimo.
Bene, continua pure a leggere quello che vuoi anche dopo che ho corretto
e precisato, sarà un dialogo che da qui in avanti condurrai da solo.



ma il problema è che non devi solo rimpiazzare (alias), ma creare una
funzione...
boh almeno io la vedo così... prova a creare una funzione tipo:
quantoh() {
  find ~ -iname \*$1\* -print0 | xargs -0 du -ckh
}
io ho messo i backslash per evitare di interpretare glia asterischi...
non so se sia uguale/meglio/peggio delle virgolette... fai un po' di
prove al riguardo...
metti queste 3 righe nel .bashrc o dalle da riga di comando (mi
raccomando non mettere tutto su una linea...)
e poi dai il comando
quantoh mp3
dovrebbe fare quello che chiedi.
apri in contemporanea un altro terminale e mentre il rpogramma gira dai
un
ps xa
per vedere se fa quello che deve... (occhio che il pipe spezza i
processi)
serve??

 E' chiaro?
Eri stato chiaro anche prima. E' sembro che a volte sembra non capire
l'italiano :)
-- 
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?

 raccomando non mettere tutto su una linea...)
Quindi non in .profile! Se non ricordo male bashrc non ha il dot davanti...
Questa operazione influirà solo sulla mia login o su tutte?
Grazie per l'aiuto!


 Grazie per l'aiuto!
boh dovrebbe essere .bashrc
per quanto ne so
e viene letto tutte le volte che lanci una shell
comunque leggiti il man bash per capire come dove e quando legge i
.profile e .bashrc
ora non ricordo

 parlare male di qualche Linux :)
Stavo notando proprio ora, ricreandomi un alias paro paro da OSX a
freeBSD, che molti flag hanno significato diverso dall'uno all'altro
sistema operativo con l'eseguibile "top".
Tanto perché gli eseguibili sono esattamente uguali... ecco, io non ci
metterei la mano sul fuoco.


 metterei la mano sul fuoco.
Il top su osx e su linux e' completamente diverso (anche graficamente)


 fi
Purtroppo non funge: ho copiato la funzione su /private/etc/bashrc ma al
momento di salvare non me lo fa fare. Perché si parla di .bashrc quando,
almeno da me, il file non ha il dot? Oppure devo crearlo nella home, così
come ho fatto per .profile?
Invece per le funzioni specifiche
sudo find / -iname "*.mp3" -print0 | xargs -0 du –ckh | grep total
find ~ -iname "*.mp3" -print0 | xargs -0 du –ckh | grep total
l'aggiunta del pipe col grep total mi ha risolto il problema del listato dei
file!


 Non mettere funzioni nella /etc/bashrc, ma solo nella tua ~/.bashrc
Esattamente la funzione consigliata da tv. Ora però devo capire come si crea
o come creare /home/.bashrc
Anche se mi critichi..... grazie per l'aiuto! (Io crescerò........)


OK! Ricapitolando.....
Prima digito touch .bashrc nella home e poi edito /private/etc/bashrc con vi
inserendo
    if [ -f ~/.bashrc ] ; then
        source ~/.bashrc
    fi
 Poi riapro home/.bashrc e metto dentro
alias quanto='sudo find / -iname "*!:1*" -print0 | xargs -0 du -ckh | grep
total'
alias quantoh="find ~ -iname "*!:1*" -print0 | xargs -0 du -ckh | grep
total"
Quitto e riapro Terminale e tutto viaggia......


 Poi riapro home/.bashrc e metto dentro
quantoh() {
  find ~ -iname \*$1\* -print0 | xargs -0 du -ckh | grep total


 Su quale S.O. *nix manca il "sudo"?
Solaris.
-- 
 
www.filacchione.it
 
 "If you're dumb, surround yourself with smart people. If you're smart,
  surround yoursef with smart people who disagree with you."

Dopo la creazione di .bashrc nella home e l'edit di bashrc in /etc/ con vi,
quitto e al riavvio Terminale mi dice subito:
'bash: /Users/Cryptex/.bashrc: line 1: syntax error near unexpected token `{
}'find ~ -iname \*$1\* -print0 | xargs -0 du ?ckh | grep total
Cosa devo fare?


 Cosa devo fare?
mi sa che hai messo una riga vuota di troppo...
a me funziona:
quantoh() {
  find ~ -iname \*$1\* -print0 | xargs -0 du -ckh | grep total
}

 a me funziona:
allora la funzione č giusta!
Byebye


  }
si
ma qual'è il rpoblema che hai con /etc e ~ ???
/etc/bashrc è letto da tutti gli utenti, quindi se metti una cosa lì
è per tutti gli utenti.
~/.bashrc è per un singolo utente.....
puoi metterli tutti e due in /etc/bbashrc o in ~/.bashrc non vedo il
problema, sta a te... come ti piace di piu' e che uso ne devi fare...
ciao

 fregarsi l'ambiente di tutti gli utenti.
si ok... infatti, non capisco perché tirar fuori sempre la etc... ma
se lo vuol fare, che lo faccia.
ok non per i test, ma una volta che funziona.... la etc è lì
apposta...

ci siamo quasi... dovevo avere degli spazi inopportuni in .bashrc della
home: Ora accedo al Terminale senza più msg d'errore!
Solo che..... scrivendo
MagicMac:~ Cryptex$ quantoh .doc
ottengo
MagicMac:~ Cryptex$
come vedi.... non ottengo nulla! E... di file .doc c'è n'è abbastanza.......
Si può risolvere?
Grazie!
P.S.: ho messo anche la versione col sudo e tutto il filesystem. Solo che
anche in questo caso non ottengo nulla!


bizzarro.... a me funziona perfettamente...
prova con questo e poi aggiungi i pipe...
quantoh() {
  find ~ -iname \*$1\* -print  ;
}
e vedi se il problema e' quello....
trovi qualche file così?


 }
intendi
quantoh() {
  find ~ -iname \*$1\* -print ; | xargs -0 du –ckh | grep total
}
 
quindi togliendo lo 0 dal print, che invece dice il libro di accoppiare a
xargs -0
ma ho il sospetto che il ; vada in fondo, dopo grep total.......
grazie!



nononnon spetta, io dicevo di cominciare a vedere cosa restituiva il
comando find.
 forse non ci siamo capiti su quel che fa la funzione:
tu prendi il comando da terminale per esempio
find ~ -iname \*.mp3\* -print
e questo ti genera un output a video (che sono tutti i file che
contengono .mp3)
poi tu vuoi processare questo output e fare qualcos'altro: e allora gli
aggiungi in "pipe" (la barra verticale) gli altri comandi cioè xargs:
per fare cio' concateni appunto con il pipe "|" i due:
 find ~ -iname \*.mp3\* -print  |  xargs -0 du -ckh
e questo ti dà un output diverso. che è il riusltato del comando du
-chk di tutti i file trovati da find.
Poi non ti basta, vuoi prendere la riga che contiene total e allora con
un altro pipe dai il comando grep.
per cui:
 find ~ -iname \*.mp3\* -print  |  xargs -0 du -ckh  | grep total
Ora, perché tutto questo??
tu hai detto qui:
http://groups.google.com/group/it.comp.macintosh/tree/browse_frm/thread/50ca6b5249eb0930/17f555128ccd1fd3?rnum=31&hl=it&_done=%2Fgroup%2Fit.comp.macintosh%2Fbrowse_frm%2Fthread%2F50ca6b5249eb0930%2F05666a0e3290eb5b%3Flnk%3Darm%26hl%3Dit%26#doc_0428963a84e3ad54
che non ti dava output... io ti ho solo consigliato di "scorporare i 3
comandi che erano concatenati nel pipe per "debuggare" la tua funzione,
perché i problemi potrebbero venire dal fatto che hai messo la
funzione nel .bashrc (e magari ti sei dimenticato di aprire una nuova
shell o di farglielo rileggere) o dal fatto che hai mal scritto la
sintassi della funzione (il problema che diccevi del punto e virgola)
o perché proprio i comandi che hai messo in pipe fano casino. per cui
il mio consiglio è vedere piano piano a partire da
 find ~ -iname \*.mp3\* -print
e poi
 find ~ -iname \*.mp3\* -print  |  xargs -0 du -ckh
e poi
 find ~ -iname \*.mp3\* -print  |  xargs -0 du -ckh  | grep total
tutto funziona. a quel punto crei la funzione......
ciao


nononnon spetta, io dicevo di cominciare a vedere cosa restituiva il


 find ~ -iname \*.mp3\* -print
Questo funge già da tempo, anche nella versione fino al grep total...
infatti (ne ho fatti due e messi in home/.profile) se scrivo .htm o .mp3
vanno (non ricordo se solo sulla home o col sudo sull'intero filesystem: qui
ho il PC e non riesco a dirtelo).
Fino a qui non mi serve neanche tutto il casino con bashrc e .bashrc per
intenderci...
Il problema nasce quando desidero creare un comando generico, il famoso
"quantoh" (o la versione estesa al filesystem, "quanto"), perché mi dà.....
niente, né errore, né risultato.
Oddio, posso sempre crearli ad hoc sul momento per tutte le estensioni.....
e taglio la testa al toro: ma visto che a te il generico funziona, sono
incuriosito!
Grazie! ;-)


ok, ma se crei il "comando generico"
quantoh() {
  find ~ -iname \*$1\* -print  ;
}
cosa ti da' ??? funziona??
e poi nel primo (o secondo) mio messaggio dicevo di provare a
"aggirare" gli asterischi...
prova con
quantoh() {
  find ~ -iname "*$1*" -print  ;
}
ma mi pare molto strano, qui da me (e da altri a quanto pare) funziona.
per fare piu' in fretta non includerla nei file di configurazione, ma
fai le prove da riga di comando:
quantoh() {    find ~ -iname \*$1*\ -print  ;  }
poi cerca di postare esattamente quello che fai e gli errori (suppongo
che non ce ne siano se non li metti)
ciao