[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RiminiLUG-General] bash redirezione I/O PIPE e filtri



> Il giorno Tue, 03 May 2011 12:27:00 +0200
> Ivan tarozzi <ivan@xxxxxxxxxxxx> ha scritto:
> 
> > No dai.... quella della mail privata era uno scherzo vero?!? non
> > vorrei che sembrassimo così avidi di birra e corti di braccino :D

Io ho inviato questa soluzione (?) in busta chiusa poco fa..., ma visto
che tanto sono recalcitrante alla birra :-) e il braccino è quello che
è... la mando in ml.

tanto fa fede il timbro postale!

Ciao,
Giovanni


Inizio messsaggio inviato:

Data: Tue, 3 May 2011 12:27:10 +0200
Da: Giovanni Pasini <gpasini@xxxxxxxxxxx>
A: Filippo Giunchedi <filippo@xxxxxxxxxxxx>
Oggetto: Re: [RiminiLUG-General] bash redirezione I/O PIPE e filtri


Ciao Filippo,

Il giorno Fri, 29 Apr 2011 20:54:56 +0100
Filippo Giunchedi <filippo@xxxxxxxxxxxx> ha scritto:

> [i lettori mi scuseranno in anticipo se intervengo solo per fare il
> rompiscatole! :)]

ci mancherebbe!

> attenzione che la shell e' un oggetto alquanto insidioso e ci vuole
> non poca attenzione a creare script robusti (la advanced bash shell
> scripting guide che ti ha linkato Ivan contiene molti spunti).
> 
> Un esercizio interessante da fare per chi ci si vuole cimentare e'
> provare il comando sopra per rinominare un file che contiene degli
> spazi (per aiutarti usa l'opzione -x della shell).
> 
> Ad esempio:
> 
> touch 'foo bar.c.txt'
> for i in *.c.txt; do echo mv $i $(basename $i .c.txt).c; done | bash

facendo così mi sembra funzioni (comunque trovata tempo fa in
rete per risolvere un problema con elenchi di dati contenuti in
file di testo da analizzare riga per riga, se non ricordo male...):

touch 'foo bar2.c.txt' 'foo bar.c.txt' 'foo_bar.c.txt' 'foo_bar2.c.txt'
IFS=$(echo -en "\n\b") #The Bash for loop splits using a whitespace
(space, tab or newline)
for i in *.c.txt; do echo mv \'$i\' \'$(basename $i .c.txt).c\'; done |
bash unset IFS

però se non ci sono file *.c.txt la riga esce così:
mv '*.c.txt' '*.c'
mv: impossibile eseguire stat di "*.c.txt": No such file or directory

> filippo

Ciao,
Giovanni