[Linuxtrent] Re: Esempi shell.

  • From: Michele Bert <micbert75@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Fri, 28 Oct 2011 09:58:18 +0200

Il 28 ottobre 2011 09:33, Michele Bert <micbert75@xxxxxxxxx> ha scritto:
> for file in *_torre_*.txt ; do mv  $file \"`echo $file |sed
> "s/_torre_/ torre /"`\"; done
>
Possibilità:

for file in *_torre_*.txt ; do ofile=`echo $file |sed "s/_torre_/
torre /"`; mv $file "$ofile";done

Piccola spiegazione. Alla prima iterazione, $file è 'input_torre_00_03.txt'
- echo $file #scrive il nome del file (input_torre_00_03.txt) nella pipe
- sed "s/_torre_/ torre /" #sostituisce la prima sottostringa con la seconda
  (il risultato è 'input torre 00_03.txt')
- il risultato viene salvato nella variabile $ofile
- mv $file "$ofile" #esegue il comando mv, con due argomenti: la
stringa in $file e
  quella in $ofile

Qual'è la differenza rispetto alla prima versione?
Mentre nel primo caso le doppie apici " fanno parte della stringa che
contiene il nome del file, e come tali vengono passate al comando mv,
nel secondo vengono interpretate dalla shell, ad indentificare il
fatto che la stringa in $ofile va passata coem argomento unico.

In altre parole, nel primo caso, ad ogni iterazione la shell doveva
interpretare un comando del tipo:
mv  input_torre_xx_xx.txt \"input torre xx_xx.txt\"
e quindi quindi chiama il comando mv con gli argomenti:
- input_torre_xx_xx.txt
- "input
- torre
- xx_xx.txt"

Infatti l'errore che dà è:
 mv: l'obiettivo "xx_xx.txt\"" non è una directory

Conferme? Smentite?

Michele
--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: