Purtroppo mi trovo ad affrontare un progetto dell'uni in bash scripting non avendolo studiato granchè e avendo o due dispensine striminzite del prof.. o pdf in inglese di 500 pagine.. e siccome ho 10 giorni scarsi.. ogni tanto mi trovo a chiedere aiuto anche per cose medio/banali (dopo averci sbattuto un po' la testa) ^_^
Il progetto: devo emulare la funzione rsync SOLO nel funzionamento locale (da una dir all'altra) e con alcuni parametri
Il problema specifico: il problema specifico è che devo copiare file per file perchè devo discriminare la copia di ogni singolo file a seconda di alcuni flag. Ma questo non vi interessa se non per dovere di cronaca.
Il punto è che ho problemi ad implementare la (mutua) ricorsione quando devo copiare una directory con il suo contenuto
semplifico all'osso il codice.. la funzione principale è start_copy che riceve dal main una lista di file in cui i primi (di numero imprecisato) sono sorgenti e l'ultimo è la directory di destinazione.
Ora.. dopo mille problemi sono arrivato a questo punto.. che dovrebbe funzionare... ma il problema è che alla seconda chiamata di start_copy (quando a chiamarla è copy_dir) come ultimo parametro (${!#}) mi trovo l'intera lista di parametri e non solo l'ultimo (la destinazione corrente) come mi aspetterei...codice:start_copy() { dest=${!#} #l'ultimo parametro è la destinazione for file in $* #ciclo su tutti i parametri do #esco dal ciclo quando arrivo all'ultimo #parametro che è uguale alla destinazion if [ $file == $dest ] then break fi #dopo vari controlli arrivo al punto #in cui devo copiare if [ -d $file ] then copy_dir $file $dest else copy $file $dest fi done } copy() { #dopo vari controlli copia, se necessario, così cp $1 $2/`basename $1` } copy_dir() { #dopo vari controlli arrivo qui mkdir $2/`basename $1` #crea la dir #faccio la chiamata ricorsiva passando il contenuto della #dir che sto copiando start_copy "`ls -x $1` $2/`basename $1`" }
in più mi va in loop... probabilmente proprio per questo errore
qualcuno è così paziente da aiutarmi a capire dove cacchio sbaglio?
tnx
![]()