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

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

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

Messaggio 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.
Ultima modifica di UbuNuovo il lunedì 26 maggio 2014, 14:51, modificato 1 volta in totale.
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

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

Messaggio da vaeVictis »

Usa rsync
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

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

Messaggio da UbuNuovo »

Come? Il server ftp è remoto e non ho accesso ssh.
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

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

Messaggio 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 :)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

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

Messaggio 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
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

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

Messaggio 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.
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

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

Messaggio 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.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

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

Messaggio da UbuNuovo »

Ok grazie.
Più tardi comunque provo curlftpfs, poi devo andare via.
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

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

Messaggio 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.
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

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

Messaggio 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
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

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

Messaggio da UbuNuovo »

Visto che non ci sono nuovi interventi metto risolto.
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

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

Messaggio 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.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

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

Messaggio 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).
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti