[Linuxtrent] Re: Esempi shell.

  • From: Flavio Stanchina <flavio@xxxxxxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Fri, 28 Oct 2011 17:13:55 +0200

Michele Bert wrote:
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

A parte che in bash puoi fare la sostituzione direttamente con l'apposito operatore:

  for file in *_torre_*.txt ; do
    mv "$file" "${file/_torre_/ torre }"
  done

Meno flessibile di sed, ma sufficiente per la maggior parte delle esigenze.

Nota che ho messo tra virgolette anche il primo riferimento a "$file": è sempre una buona pratica, non si sa mai come e quando riutilizzerai questo script dimenticandoti che non lo avevi pensato per gestire nomi di file con spazi o altre amenità...

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.
[...]
Conferme? Smentite?

Tutto corretto, direi.

Poi, se non lo stai facendo per esercizio ma perché devi *davvero* rinominare una massa di file e vuoi tutta la potenza delle regular expression, ti suggerisco di usare il comando "prename": è distribuito con perl, almeno su Debian, anzi c'è un apposita /alternativa/ che lo rende disponibile semplicemente come "rename".

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


Other related posts: