PDA

View Full Version : [BASH] script per rinominare dei file


agosteeno
22-04-2010, 09:09
Salve a tutti, avrei un piccolo problema. Premetto che nn ho praticamente mai programmato script, infatti questi sono esercizi con i quali sto' imparando. Devo realizzare uno script che realizza un comando con questa sintassi:
modify [dir] suffix
che cambia tutti i file in dir aggiungendogli al loro nome il suffisso suffix e, se dir nn e' specificata allora lo fa' per la directory corrente.
Ho pensato 2 soluzioni: una che vede quanti file ci sono in dir e li scorre ognuno cambiando il nome col comando mv, solo che non ho idea di come contare i file. Mi viene in mente di usare il comando ls, ma nn saprei come applicarlo. Un altra soluzione sarebbe quella di usare un comando che modifichi in blocco tutti i nomi di file, per esempio il comando rename, che cmq nn credo faccio al caso mio... Sono ben accetti consigli e suggerimenti, vi ringrazio in anticipo.

lupoxxx87
22-04-2010, 09:36
se usi l'operatore * la modifica verrà eseguita su tutti gli elementi.

per esempio

mv /tmp/* /usr/local/tmp

sposta tutti gli elementi in tmp nella seconda cartella
(ora non sono sicurissimo al 100% della correttezza della mia riga, ma l'operatore * ti può aiutare di certo)

poi per la modifica del nome penso che dovresti usare concat

agosteeno
22-04-2010, 09:41
Grazie per l'aiuto! Si, avevo in mente una cosa del genere, ma nn trovavo nessun comando che mi consentisse di scrivere "in append". Per quanto riguarda questo comando concat, la bash mi dice command not found, e guardando in rete mi sembra piu' una funzione c... Nn saprei come usarlo!

lupoxxx87
22-04-2010, 10:02
ah si non avevo prestato attenzione che è una basic shell....

beh allora puoi salvare le stringhe in variabili e fare così

$var1 = uno
$var2 = due
$var3 = $var1$var2


alla fine in $var3 avrai la stringa "unodue"

agosteeno
22-04-2010, 10:26
resta il problema che nn so' come trovare il numero di file nella directory, per fare il while...

Caldwell83
22-04-2010, 11:24
Il ciclo sui file lo puoi fare cosi:


for file in `ls -1 $DIR`
do
echo $file
done

zuper
22-04-2010, 11:42
scusami ma non capisco che file hai e come vuoi modificarli :)

puoi fare un esempio concreto?

tipo

file.txt
deve venire
ciao.txt

grazie :)

DanieleC88
22-04-2010, 12:07
Il ciclo sui file lo puoi fare cosi:


for file in `ls -1 $DIR`
do
echo $file
done


Anche senza ricorrere ad ls, BASH è in grado di farlo automaticamente:
for file in $DIR/*; do
mv ${file} "${file}${append}"
done

zuper
22-04-2010, 12:18
uhm forse sto capendo :):)

ti butto giù 2 idee :)

crei lo script modify.sh, che richiamerai con modify.sh [suffisso] [dir]

all'interno andrai a scrivere qualcosa del genere

SUFFISSO=$1
DIR=$2

if [ '$DIR' = '' ] then
$DIR=`pwd`
fi

cd $DIR

for file in `ls` ;do
echo $file
done

#####

intanto guarda se va :)
poi vediamo il mv :)

agosteeno
22-04-2010, 13:58
Vi ringrazio tutti per l'aiuto. Ora nn posso pero' provare gli aiuti perche' ho altri lavori da fare, ma appena lo faccio vi posto il risultato. Grazie ancora.