Pagina 1 di 1

[Risolto] [Bash] Variabile in lftp

Inviato: venerdì 14 gennaio 2022, 14:16
da fabiopig
Ciao a tutti,
stavo cercando di backuppare una cartella da un mio server su un nas con l'uso del comando lftp.

Codice: Seleziona tutto

#!/bin/bash
lftp -e 'mirror -I '*gz' -c -R /Source/Cartella "target/Anno `date +%Y`/cartella"; bye' -u user,pass Site
ma a quanto pare nella destination del mirror non si possono mettere comandi esterni (`date +%Y`), il mio intento è fare creare nel nas la cartella dell'anno corrente e all'interno copiare la cartella sorgente.

Avete qualche idea?

Grazie

Re: [Bash] lftp

Inviato: venerdì 14 gennaio 2022, 15:25
da vaeVictis
Non ho il portatile sotto mano ma credo che il problema sia dovuto al fatto che usi le 'single quotes', al cui interno la command substitution non viene eseguita. Che poi è il motivo per cui le chiudi prima e le riapri dopo del globbing con l'asterisco, *gz, che per inciso se ti produce nomi con spazio ti comporta un errore nel funzionamento del comando.

Quindi, prova a usare le virgolette doppie per racchiudere quello che viene dopo -e.

Inoltre,

Codice: Seleziona tutto

`date +%Y` 
è deprecato.
Usa

Codice: Seleziona tutto

$(date +%Y)

Re: [Bash] lftp

Inviato: martedì 1 febbraio 2022, 13:00
da fabiopig
Scusa il ritardo nella risposta, ma il risultato non cambia, nel nas mi ritrovo la cartella /Anno (date +%Y)

Re: [Bash] lftp

Inviato: martedì 1 febbraio 2022, 13:02
da vaeVictis
Posta il comando che dai.

Re: [Bash] lftp

Inviato: martedì 1 febbraio 2022, 13:36
da fabiopig

Codice: Seleziona tutto

lftp -e 'mirror -I '*gz' -c -R /source/cartella1 "/target/Anno (date +%Y)/cartella1"; bye' -u usr,pwd ftp.it

Re: [Bash] lftp

Inviato: martedì 1 febbraio 2022, 13:51
da vaeVictis

Codice: Seleziona tutto

lftp -e "mirror -I *gz -c -R /source/cartella1 
 /target/Anno-$(date +%Y)/cartella1; bye" -u usr,pwd ftp.it
Tutto questo se il globbing in *gz si traduce in file senza spazi.

Re: [Bash] lftp

Inviato: martedì 1 febbraio 2022, 13:58
da Lucio C
Per un backup non sarebbe meglio usare rsync ?
Nel modo base (che uso io e molti colleghi) si puo' copiare da origine a destinazione con creazione automatica di tutte le directory "nuove" e conservazione delle date di creazione originali (oltre al fatto che il transfer avviene solo per i files modificati), opzionalmente cancellare i files cancellati all'origine (p.es. backup giornaliero e pulizia settimanale).
Ma esiste anche un modo incrementale per backup "con data" (mai usato, ma man rsync)

[Risolto] [Bash] Variabile in lftp

Inviato: martedì 1 febbraio 2022, 14:51
da fabiopig
vaeVictis ha scritto:
martedì 1 febbraio 2022, 13:51

Codice: Seleziona tutto

lftp -e "mirror -I *gz -c -R /source/cartella1 
 /target/Anno-$(date +%Y)/cartella1; bye" -u usr,pwd ftp.it
Tutto questo se il globbing in *gz si traduce in file senza spazi.
Ottimo Grazie 1000 così ha funzionato!

Re: [Bash] lftp

Inviato: martedì 1 febbraio 2022, 14:52
da fabiopig
Lucio C ha scritto:
martedì 1 febbraio 2022, 13:58
Per un backup non sarebbe meglio usare rsync ?
Nel modo base (che uso io e molti colleghi) si puo' copiare da origine a destinazione con creazione automatica di tutte le directory "nuove" e conservazione delle date di creazione originali (oltre al fatto che il transfer avviene solo per i files modificati), opzionalmente cancellare i files cancellati all'origine (p.es. backup giornaliero e pulizia settimanale).
Ma esiste anche un modo incrementale per backup "con data" (mai usato, ma man rsync)
Grazie per il consiglio, dato che sono subentrato in una infrastruttura dove veniva usato l'lftp ho continuato con questo, ma lo provo!

Re: [Risolto] [Bash] Variabile in lftp

Inviato: martedì 1 febbraio 2022, 17:52
da Lucio C
Attenzione che la man page di rsync e' intimidante, :devilmad: richiede in ogni caso una attenta lettura e rilettura e molti test per ottenere quello che uno vuole ... io ho avuto un po' una storia "al contrario".

Ho cominciato anni e anni fa con rsync in daemon mode (che non e' affatto obbligatorio) dovendo mirrorare un sito in istituto su uno in Cile ... piu' o meno dallo stesso tempo a mirrorare un sito di sviluppo e la versione di produzione (sulla stessa rete locale, quindi in NFS senza demoni) ... e poi ho deciso di usarlo anche per i backup personali (su due dischi della stessa macchina). In tutto cio' per me e' utilissimo e importante che i files copiati abbiano stesso timestamp e permission (come appunto in un mirror).

Esattamente in questo momento sto proprio litigando con rsync per un altro caso ancora ... voglio recuperare il backlog di quasi due anni di smartworking, in cui copiavo cose dal lavoro a un laptop e poi a volte le rimettevo a posto e a volte no ... ora (dopo aver mollato il laptop non prima di averlo rsyncato sul nuovo desktop di casa ;) ) vorrei riportare al lavoro tutto cio' che e' stato modificato ... ma se venendo copiato la copia ha un timestamp piu' recente ma non e' stata mai modificata non voglio modificare il timestamp dell'originale ... per cui sto giocando coi modi "dry run" e "itemize changes" ... direi che ne sto venendo fuori bene. :D Non uso demoni ma un tunnel in ssh con sshpass (direi in preferenza a certi script ftp ripescati dagli anni '90 che avevo ripreso a usare ultimamente).