Pagina 1 di 1

[risolto] bash: upload ftp solo se la directory non esiste

Inviato: mercoledì 7 maggio 2014, 19:57
da UbuNuovo
A fine di uno script bash devo fare l'upload su un server ftp (nella directory "/../2014") di: un file index.html, di una directory contente immagini "gallery_xxx" e (solo se non esiste già) della directory "comune" contenente file css, javascript e file comuni.
Per fare l'upload non ci sono problemi, solo vorrei evitare di fare l'upload della directory "comune" se esiste già.
Non ho accesso ssh al server quindi passo i vari comandi mediante here-doc al programma "ftp".
per intendersi:

Codice: Seleziona tutto

ftp -n -i $host <<comandi_ftp
user $user $pass
binary
bell
cd $path_remoto
put "$trasf_file"
mkdir "$trasf_dir"
lcd "$trasf_dir"
cd "$trasf_dir"
mput "*.*"
...
comandi_ftp
Il problema è che in "ftp" non ho trovato opzioni del tipo "Esegui mkdir (o mput) solo se la directory non esiste".
Per mkdir non ci sono problemi ma vorrei evitare l'upload della directory "comune" se esiste già.
Ho letto anche il man di "ncftp", ho scoperto che è molto più potente di "ftp" ma non ha comunque l'opzione che vorrei.

L'unica cosa che mi è venuta in mente è di verificare, prima, l'esistenza della directory (o di un file interno) con "wget -spider ..." e di creare poi la stringa con i comandi da passare a ftp in base al risultato della verifica.

Sapete indicarmi qualche altra idea o qualche programma ftp che abbia l'opzione da me desiderata?
Grazie a chiunque voglia intervenire.

Re: [bash] upload su server ftp solo se la directory non esi

Inviato: mercoledì 7 maggio 2014, 21:14
da vaeVictis
Usa rsync

Re: [bash] upload su server ftp solo se la directory non esi

Inviato: mercoledì 7 maggio 2014, 22:06
da UbuNuovo
Come? Il server ftp è remoto e non ho accesso ssh.

Re: [bash] upload su server ftp solo se la directory non esi

Inviato: mercoledì 7 maggio 2014, 22:29
da vaeVictis
Sono dallo smartphone, motivo per cui il mio precedente intervento è stato molto sintetico.
Dopo dal portatile ti spiego meglio, se non hai risolto.
Prova comunque a vedere i risultati di una ricerca con google su "bash avoid ftp upload if directory already exists" che trovi qualche dritta :)

Re: [bash] upload su server ftp solo se la directory non esi

Inviato: mercoledì 7 maggio 2014, 22:34
da UbuNuovo
Avevo già cercato ma non ho trovato niente di utile, comunque cerco ancora, grazie.
Non ti preoccupare non ho urgenza di risolvere.
Ciaux

Re: [bash] upload su server ftp solo se la directory non esi

Inviato: giovedì 8 maggio 2014, 0:03
da UbuNuovo
Forse ho trovato! Con curlftpfs dovrei poter montare il server ftp sul mio filesystem per poi con rsync sincronizzare le directory.
Domani se posso mi documento per bene e se riesco posto il procedimento.
In ogni modo altri suggerimenti sono ben accetti.

Re: [bash] upload su server ftp solo se la directory non esi

Inviato: giovedì 8 maggio 2014, 17:27
da vaeVictis
Ci sono metodi più semplici.
Ieri pensavo di averti scritto, invece ho salvato la bozza :)
Sono di nuovo dal cellulare, ti dico dopo.

Re: [bash] upload su server ftp solo se la directory non esi

Inviato: giovedì 8 maggio 2014, 17:38
da UbuNuovo
Ok grazie.
Più tardi comunque provo curlftpfs, poi devo andare via.

Re: [bash] upload su server ftp solo se la directory non esi

Inviato: giovedì 8 maggio 2014, 19:10
da UbuNuovo
Ho provato "curlftpfs"! L'utilizzo è molto semplice

con i dati:

Codice: Seleziona tutto

host="ftp.NOME_SITO.it/"
user="MIO_USER"
pass="MIA_PASSWORD"
dir_remota_da_montare="www.NOME_SITO.it"	# indirizzo relativo a quello di accesso (se diverso da quello che si vuol montare; altrimenti lasciare vuota dir_remota="")
path_locale_mount="/tmp/mount_ftp/"
creo il punto di mount se non esiste già

Codice: Seleziona tutto

[ -d "$path_locale_mount" ] || mkdir "$path_locale_mount"
per montare l'host ftp basta dare il comando

Codice: Seleziona tutto

curlftpfs -o user="${user}:${pass}" ftp://${host}${dir_remota_da_montare} "$path_locale_mount"
ora ci si può spostare nella directory di mount

Codice: Seleziona tutto

cd "$path_locale_mount"
con "ls" si può vedere il contenuto della directory remota montata nel punto di mount locale.
Si possono usare tutti i comandi (ls, mkdir, cp, cd, rsync, eseguire script etc...) come se fosse una risorsa locale.
Si può accedere con il terminale (più reattivo) ma anche con Nautilus, naturalmente in nessun caso si può accedere alle directory superiori alla prima directory remota montata.
Per lo smontaggio si deve essere fuori dalla directory di mount e non devono esserci operazioni in corso!
Nel caso del mio esempio prima di smontare, devo dare 'cd ..' risalendo fino ad uscire (o 'cd /tmp') per poi poter smontare la risorsa con:

Codice: Seleziona tutto

fusermount -u "$path_locale_mount"		# che è uguale a digitare:#		fusermount -u /tmp/mount_ftp/
Più facile a farsi che a dirsi.

Ora però, questo sistema, per quanto ganzo, lo vedo più adatto ad un uso interattivo che all'utilizzo da script.


Utilizzando ftp e wget per la verifica

Attenzione! Questo script non l'ho ancora provato, ho fatto solo degli echo per vedere cosa fa, dovrebbe andare bene ma non si sa mai.
ho questi dati:

Codice: Seleziona tutto

gallery="gallery_prova"
nome_file="${gallery}.html"
nome_dir=$gallery
dir_comune="comune"
host="ftp.NOME_SITO.it" # o ip
user="MIO_USER"
pass="MIA_PASSWORD"
path_remoto="/www.NOME_SITO.it/DIR1/2014/DIR2"
path_locale="/tmp/prova_ftp"
prima controllo che la dir che non voglio "riuploadare" sia presente o meno (la directory "comune" deve contenere un file index.html (anche vuoto)) con:

Codice: Seleziona tutto

if wget --spider -q http:/${path_remoto}/${dir_comune}
	then
	
cmd_conune="mkdir $comune
lcd $dir_comune
cd $dir_comune
mput *.*
cd $path_remoto"

	else
		cmd_conune=""
fi
rendo corrente la cartella con il file da copiare ed eseguo i comndi ftp

Codice: Seleziona tutto

path="$(pwd)"
if [ ! "$path" = "$path_locale" ] ; then
	cd "$path_locale"
fi

ftp -n -i $host <<comandi_ftp
user $user $pass
binary
bell
cd $path_remoto
put "$nome_file"
$cmd_conune
mkdir "$nome_dir"
lcd "$nome_dir"
cd "$nome_dir"
mput "*.*"
cd ..
ls
quit
comandi_ftp
Devo scappare, se qulcuno degli esperti trova qualche magagna mi faccia un fischio, grazie.

Re: [bash] upload su server ftp solo se la directory non esi

Inviato: martedì 13 maggio 2014, 1:23
da UbuNuovo
Ho avuto dei grossi guai con il pc. Ora ho piallato tutto e installato ubuntu 14.04 ed ho risistemato tutto (o quasi).

@VaeVictis mi dicevi che esistono modi più semplici per fare quello che voglio, potresti darmi qualche ragguaglio?
Così poi provo e se tutto è ok posso mettere risolto.
Ciaux

Re: [bash] upload su server ftp solo se la directory non esi

Inviato: lunedì 26 maggio 2014, 14:49
da UbuNuovo
Visto che non ci sono nuovi interventi metto risolto.

Re: [risolto] bash: upload ftp solo se la directory non esis

Inviato: lunedì 26 maggio 2014, 15:17
da vaeVictis
Scusami UbuNuovo, sto incasinatissimo.
Per lavoro. E perché sto cambiando il sistema operativo, quindi non ho a portata di mano i link che mi ero segnato.
Mi sono appuntato che è rimasta in sospeso la tua domanda :)
Scusami, appena ho un attimo riprendo quello che avevo visto e te lo posto.

Comunque, avevo semplicemente ragionato in questo modo.
Con ftp controlli prima se la directory esiste in remoto (su Google "bash ftp check if directory exists").
E poi ti regoli di conseguenza.

Re: [risolto] bash: upload ftp solo se la directory non esis

Inviato: lunedì 26 maggio 2014, 15:55
da UbuNuovo
Ok, allora è quello che ho fatto io, con wget basta una mezza riga.
Avevo inteso che esistesse un modo di usare rsync direttamente... ho frugato il web per lungo e per largo ma non ho trovato il sistema, (senza accesso ssh o senza montare il filesystem remoto sul nostro locale).