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 /"`\"; donePossibilità: 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