#!/bin/bash
IFS='
' #separatore per gli elementi dell'array: a capo
#parametri#
ORIGINAL=./originali #percorso dei file da copiare
DESTINATION=./rinominati #percorso di destinazione
LIST=./lista #nome file che contiene la lista di nomi
array=($(ls -1 $ORIGINAL))
len=${#array[*]}
i=0
while [ $i -lt $len ]; do
row=$((i+1))'p' #calcolo la riga del file
name=$(sed -n "$row" < $LIST) #ricavo il nome dal file
cp $ORIGINAL/${array[$i]} $DESTINATION/"$name" #copio col nuovo nome
let i++
done
echo "done!"
testato e funziona.
i file devono essere del tipo 01 02 ecc, perchè ls li ordina in quel modo. altrimenti ti ritrovi 1 10 11 ... 2 20 .. ecc. scegli tu come preferisci. i nomi devono essere scritti in un file, un nome per riga, e possono anche contenere spazi. tutti i parametri sono all'inizio dello script.
non fa controllo d'errore, e nella cartella di origine devono esserci SOLO i file da copiare. nel caso si può fare un po' di codice in più di controllo, se serve