PDA

View Full Version : [HELP] Script in BASH, perchè non funziona ?


The X
15-11-2003, 19:09
Un mio amico mi ha scritto questo piccolo script che dovrebbe leggere dentro ad un file di testo il contenuto di una riga e rinominare un file sequenziale con questo testo....

#!/bin/bash

directory=$1
infile=$2
count=1

for i in $( ls $directory );
do
src=$directory/$i
tgt=$directory/$(sed $(($count))!d $infile)
echo $tgt
count=$(($count+1))
mv $src $tgt
done

Quando lo lancio però mi da questo errore :

server:/@Bakcup# ./mmv prova infile.txt
prova/01 - ita - ciao ciao.mpg
mv: when moving multiple files, last argument must be a directory
Try `mv --help' for more information.
prova/02 - ita - aafasdf.mpg
mv: when moving multiple files, last argument must be a directory
Try `mv --help' for more information.

Qlc sa dirmi il perchè ?

gurutech
15-11-2003, 19:41
quando il nome di un file contiene degli spazi devi racchiuderlo tra virgolette. per cui

Originariamente inviato da The X
Un mio amico mi ha scritto questo piccolo script che dovrebbe leggere dentro ad un file di testo il contenuto di una riga e rinominare un file sequenziale con questo testo....

#!/bin/bash

directory="$1"
infile="$2"
count=1

for i in $( ls "$directory" );
do
src="$directory/$i"
tgt="$directory/$(sed $(($count))!d $infile)"
echo "$tgt"
count=$(($count+1))
mv "$src" "$tgt"
done

Quando lo lancio però mi da questo errore :

server:/@Bakcup# ./mmv prova infile.txt
prova/01 - ita - ciao ciao.mpg
mv: when moving multiple files, last argument must be a directory
Try `mv --help' for more information.
prova/02 - ita - aafasdf.mpg
mv: when moving multiple files, last argument must be a directory
Try `mv --help' for more information.

Qlc sa dirmi il perchè ?

The X
15-11-2003, 19:54
Grazie mille Guru ora funziona ^_^

Adesso nn vorrei chiedere troppo MA sapresti dirmi come poter modificare questo script affinkè t avverta se dimentichi d inserire il nome della directory o il nome del file (ovvero se nn trova il file o directory)

Sarebbe una cosa tipo "if ecc ecc then ecc ecc else" giusto ? ^_^

gurutech
15-11-2003, 20:16
#!/bin/bash

directory="$1"
infile="$2"
count=1

if (test -z "$directory" || test -z "$infile" || \
test ! -d "$directory || test ! -f "$infile"); then {
echo "Parametri non corretti"
exit 1
}
fi

for i in $( ls "$directory" );
do
src="$directory/$i"
tgt="$directory/$(sed $(($count))!d $infile)"
echo "$tgt"
count=$(($count+1))
mv "$src" "$tgt"
done


l'ho fatto così a occhio ma dovrebbe andare

The X
15-11-2003, 20:29
6 il mio DIO ^_^

GRAZIE MILLE !!!!

Ora mi funziona tutto :D