Archives For rclone

Che fatica! Di metodi provati ne ho portati a casa diversi (non tutti funzionanti) e mi sono anche fatto una cultura ogni possibile work-around e ulteriore ostacolo sulla strada, quello che voglio riportare in questo mio nuovo articolo è il metodo che secondo me è più semplice e “fa meno male” a chi vuole tornare ad avere una situazione di sincronizzazione perfetta tra macOS e Dropbox dopo le novità annunciate dal noto servizio di Cloud Storage collaborativo. L’articolo è dedicato a Enrico che ringrazio per avermi fatto notare la poco gradita novità. Mettiamoci all’opera.

LYRL / Pixabay

Un symlink per domarli tutti

Il collegamento simbolico o symlink è l’eterno spauracchio di Dropbox, tacciato di rappresentare il male in Terra così come in cielo. Non funziona bene il PC? Colpa del symlink. Tutto è rallentato e Dropbox ti dice che il tuo utente non esiste? Ti fa male l’alluce destro? È certamente colpa del collegamento simbolico, per forza, non c’è alternativa e non c’è modo di superare un ostacolo più grande di quanto non lo sia qualsivoglia voce registrata di call center che non trasferirà mai la telefonata a un operatore umano. Il symlink non deve essere utilizzato, butta via tutto e scappa!

Curiosando dopo la segnalazione di Enrico lasciata nell’area commenti dell’articolo originale (macOS: salvare una cartella su Dropbox automaticamente) sono atterrato su una discussione datata 31 agosto che parlava dell’addio ufficiale ai collegamenti simbolici: macobserver.com/community/mgg-forum/psa-dropbox-to-no-longer-follow-symlinks. Nulla di più vero sfortunatamente, mi è bastato puntare il mio browser all’indirizzo dropbox.com/symlink_report per generare un report di collegamenti simbolici scovati dal mio client Dropbox (materiale al quale chiaramente lui ha accesso, non altro sparso per il mio SSD) escluso quindi dalla sincronizzazione trasparente, contestualmente ritrovo anche il documento di supporto che spiega l’utilizzo dei collegamenti simbolici e che include una nota molto chiara:

A partire dalla metà del 2019, Dropbox non segue più gli elementi esterni al tuo account Dropbox che sono collegati a un collegamento simbolico.

help.dropbox.com/it-it/installs-integrations/sync-uploads/symlinks

A quanto pare quella che fino a qualche tempo prima era una linea guida non imposta ma caldamente consigliata (e che tu potevi ignorare prendendotene ogni responsabilità) diventa esecutiva e decisa a tavolino per tutti gli utenti del servizio. Ti posso confermare che dopo il ripristino del backup del mio MacBook ho subito la nuova sorte stabilita e mi sono ritrovato con le cartelle sì rilanciate da collegamento simbolico, ma completamente ferme nonostante le modifiche subite dai miei file.

Mi sono preso un po’ di tempo (causa mille altri impegni) per ragionare e adottare una soluzione efficace.

Un po’ di pazienza, Hazel e se vuoi Rclone

Te lo posso assicurare: di soluzioni “fatte in casa” ne trovi davvero quante ne vuoi, alcune molto fantasiose e funzionanti, rischiose però per chi non ha esattamente tutta la necessaria confidenza con il sistema, con il Terminale e dagli ampi margini di errore. È per questo motivo che mi limiterò a riportare alcune fonti interessanti in fondo all’articolo ma delle quali non parlerò in questa sede, voglio evitare di mettere a rischio il tuo macOS (il mio l’ho torturato ma avevo un backup e tutta la capacità di tornare indietro).

Quello di cui ti parlo però è certamente Rclone (sì, ne ho già parlato in passato, Copia dati in bulk tra servizi Cloud con rclone ma anche RPi: sincronizzazione dei file tra locale e Cloud con rclone) e stavolta ci affianco anche Hazel, una utility a pagamento per macOS che sono certo ti potrà tornare utile anche per molto altro oltre il voler tenere sincronizzato Dropbox con le cartelle del tuo macOS.

Hazel

Voglio partire da Hazel perché costituisce sul serio la via più rapida per arrivare all’obiettivo. Si tratta di un’applicazione che è in grado di fare molteplici azioni legate alle tue cartelle (Scrivania, Documenti, Immagini, ecc.). Si scarica da noodlesoft.com e ha un costo licenza di circa 29€ (32 dollari al cambio di oggi che sto scrivendo l’articolo):

macOS: è guerra tra Dropbox e i link simbolici, come aggirare l'ostacolo? 1

Si può anche scaricare liberamente e provarlo per qualche giorno gratuitamente prima di decidere, a me fa sempre piacere sostenere gli sviluppatori che svolgono un ottimo lavoro quando il loro software mi permette di risparmiare tanto tempo e arrivare dritto al punto. Hazel trova attualmente posto nel pannello Preferenze di macOS, in futuro costituirà applicazione a parte. La prima volta che lo avvii ti viene chiesto se vuoi caricare degli script dimostrativi, puoi rispondere di no.

Troverai lì ad aspettarti la cartella Download che poi è la prima che ho voluto mettere alla prova con il metodo di sincronizzazione nuova. Seleziona la cartella Download e nella parte destra del pannello fai clic su “+” per aggiungere un’azione. A questo punto ti verrà proposto un pannello nel quale specificare il nome della regola e il comportamento della stessa. La mia idea è che ritoccando un file presente al suo interno Hazel possa far partire un check e conseguente sincronizzazione tra due cartelle (la Download originale del macOS e la sua gemella su Dropbox):

 

Questa regola si attiva da sola tenendo monitorata la cartella sorgente (la Download originale di macOS) e sincronizzerà il contenuto con quella Dropbox. Ti basta provare rinominando un file all’interno della cartella Download, questo dovrà essere sincronizzato con la medesima cartella su Dropbox. Hazel analizza la cartella monitorata e tiene traccia dell’ultima volta che è passato da quelle parti (con relative proprietà del file), è così che è in grado di metterti a disposizione il filtro “Date Last Matched“, parametro che permette di confrontare sorgente e destinazione rispetto all’ultima volta che Hazel si è fatto il giro completo della cartella.

E se il file che vado a creare in quella cartella è nuovo? Semplice, si inserisce una seconda e pure una terza condizione nella regola e si fa in modo che almeno una delle tre condizioni venga rispettata:

In questo caso ho modificato il nome della regola (così da permettermi di riconoscerla facilmente), il metodo di match (if any of the following conditions are met) e inserito la seconda condizione “if Date Created is after Date Last Matched” seguita a ruota dalla terza per i file che vengono aggiunti senza passare da vera e propria creazione “if Date Added is after Date Last Matched“.

Un pelo diversa è la regola che ho creato per la cartella immagini, sottoposta a un filtro differente per escludere dal monitoraggio la Libreria di Foto e quella di Photo Booth:

Il problema (attualmente parzialmente risolto) è che quando modifico o aggiungo un file nella cartella Immagini per forza di cose mi ritroverò Photo Booth anche su Dropbox, Libreria di Foto richiede un’autorizzazione specifica con macOS Catalina e posso negarla (e l’ho fatto), così facendo Hazel non può mettere mano sulla Libreria di Foto e io non me la ritrovo duplicata in Dropbox (duplicata perché la tengo già sotto backup tramite Time Machine e non mi serve averne una ulteriore copia quando sono in mobilità). Non esiste a oggi un filtro di esclusione su Hazel. Se vuoi utilizzare il metodo di sync ti ritrovi con una copia carbone tra sorgente e destinazione, più che giusto ma in qualche caso scomodo. In alternativa si potrebbe andare per un copy anziché un sync, ma così facendo faresti fatica a cancellare i file dalla cartella di destinazione quando nella sorgente non esistono più.

A proposito di file cancellati

Hazel non è ancora in grado di riconoscere e tenere sotto monitoraggio i file cancellati portando a termine una nuova sincronizzazione. Se ne parla nel forum ufficiale (noodlesoft.com/forums/viewtopic.php?f=3&t=579) ma a oggi nulla si è mosso in tal senso. Per poter cancellare uno o più file dalla cartella di destinazione dovrai semplicemente attendere di crearne di nuovi o modificarne di vecchi affinché Hazel si accorga dell’azione e proceda con una nuova sincronizzazione tra cartelle (che porta con sé anche la cancellazione dei file non più presenti nella cartella sorgente).

Poco male ti direi, è una cosa abbastanza sopportabile quando hai a che fare con cartelle di alta movimentazione.

In conclusione (su Hazel)

macOS: è guerra tra Dropbox e i link simbolici, come aggirare l'ostacolo? 5

Hazel funziona bene e fa il suo dovere permettendoti di tornare a una situazione di sincronizzazione quasi live tra le tue cartelle sorgenti e quelle di Dropbox, facendoti quasi dimenticare questa fastidiosa novità introdotta da Dropbox. L’obiezione più che giusta e che prevedo è quella relativa allo sdoppiamento dei file che porta con sé un’evidente occupazione doppia su memoria SSD / disco fisso. Nulla di più vero, è per questo motivo che voglio parlarti anche di Rclone e della sua possibile applicazione nel caso in cui la tua memoria disponibile su macOS vacilli e non permetta grande movimento.

Rclone

Rclone è uno strumento in grado di sincronizzare file tra diversi servizi in Cloud ma anche da e per il PC locale. Questo vuol dire che tramite il Terminale potresti sincronizzare una cartella tra il tuo disco fisso e Dropbox, esempio calzante per quanto dobbiamo portare a termine. Il mio obiettivo è però farti automatizzare questa operazione per qualsiasi modifica tu vada a operare in una o più cartelle che intendi tenere anche in Cloud.

Perché Rclone? Perché se sei in difficoltà e hai poco spazio libero sul tuo macOS l’ideale è non avere una doppia copia dei dati sullo stesso, Rclone permette di sincronizzare una cartella locale con una su Dropbox facendo nascere la copia dei dati direttamente online, passando così alla fase finale secondo la quale una cartella in Smart Sync Online Only non occuperà spazio sul tuo disco.

Per installare Rclone su macOS dovrai aprire un Terminale ed eseguire quanto riportato qui di seguito:

cd && curl -O https://downloads.rclone.org/rclone-current-osx-amd64.zip
unzip -a rclone-current-osx-amd64.zip && cd rclone-*-osx-amd64
sudo mkdir -p /usr/local/bin
sudo mv rclone /usr/local/bin/
cd .. && rm -rf rclone-*-osx-amd64 rclone-current-osx-amd64.zip

A questo punto scrivendo rclone nel Terminale e premendo invio dovresti ritrovarti davanti al set di istruzioni che l’eseguibile può digerire. Tutto giusto. Tocca ora connettersi a Dropbox tramite Rclone. Per farlo digita rclone config e:

  • digita n seguito da invio per creare un nuovo collegamento remoto,
  • inserisci Dropbox e premi invio (è il nome che stai dando alla nuova connessione remota),
  • inserisci dropbox o se preferisci 9 per indicare che stai selezionando Dropbox come storage da configurare, premi invio,
  • premi invio quando ti viene richiesto il client_id, fallo ancora per il client_secret e digita n premendo invio quando ti viene richiesto se vuoi modificare la configurazione avanzata,
  • rispondi y quando ti viene richiesto se vuoi utilizzare la configurazione automatica, ti si aprirà una nuova pagina sul browser che ti porterà alla richiesta di accesso di Rclone verso il tuo account di Dropbox. Concedigliela per arrivare alla schermata che riporta Success! All done. Please go back to rclone,
  • tornando alla finestra di Terminale noterai che la stessa avrà catturato il token necessario al collegamento con Dropbox, qualcosa di simile a questo:
[Dropbox]
type = dropbox
token = {"access_token":"GP-Pv4Fppo8XXFXX5koQVettv1VerSjnG_jTa87saLEc16QtASxcK4MinK1OneiQRpEilD","token_type":"bearer","expiry":"0001-01-01T00:00:00Z"}
  • conferma con y e premi invio per completare il collegamento.

A questo punto avrai collegato Rclone al tuo account Dropbox. Ti basterà iniziare a studiare un po’ di documentazione per capire come muoverti da riga di comando, puoi esplorare i tuoi file su Dropbox, scaricarne o caricarne e molto altro. Come si fa nei programmi di cucina però qui non abbiamo tempo da perdere, il piatto è quasi pronto e sto per servirtelo così che tu possa completare la ricetta.

Torna su Hazel (sì, lui in fin dei conti continua a essere fondamentale se vuoi automatizzare tutto) e fai clic sulla cartella Download. Crea una nuova regola che rispetti le stesse condizioni di cui ti ho parlato prima (file modificati, creati o aggiunti rispetto all’ultimo check di Hazel, NdR) ma stavolta sfocia nell’esecuzione di uno script bash (Shell Script) anziché nella sincronizzazione pura tra cartelle:

Per inserire / modificare lo script dovrai fare clic sulla voce “Edit script“, questo è quello che vado a eseguire tramite Rclone:

rclone sync ~/Downloads Dropbox:/MacBook/Downloads --delete-during

Tradotto vuol dire che Rclone andrà a sincronizzare la cartella Downloads presente nel mio MacBook con quella su Dropbox (che si trova in MacBook → Downloads). La sintassi è quella che necessita Rclone. Se la connessione al tuo Cloud Storage non è stata chiamata “Dropbox” allora dovrai modificarlo, così come dovrai modificare la posizione della cartella di destinazione in base alla tua configurazione. In generale ricorda che Rclone si aspetta prima l’operazione (sync in questo caso), la cartella sorgente (~/Downloads nell’esempio) e la destinazione (Dropbox:/MacBook/Downloads), seguita da eventuali altri parametri. Il mio “altri parametri” consiste nel chiedere a Rclone di cancellare nella cartella di destinazione i file non più presenti nella cartella sorgente, il tutto mentre esegue eventuali altri processi di sincronizzazione (--delete-during). Ulteriori spiegazioni disponibili nel documento relativo a tutti i possibili parametri da utilizzare: rclone.org/flags.

Cambia leggermente il codice quando si parla della cartella Immagini, così da poter escludere sul serio le cartelle Libreria di Foto e Photo Booth, nello specifico:

rclone sync ~/Pictures Dropbox:/MacBook/Pictures --delete-during --exclude "/Libreria di Foto.photoslibrary/**" --exclude "/Libreria Photo Booth/**"

Ulteriori informazioni sui possibili filtri da applicare si trovano alla pagina rclone.org/filtering.

Fa attenzione: non utilizzo i nomi delle cartelle in inglese per vezzo o per abitudine dovuta al mio lavoro (oddio, quello in realtà sì), macOS ti mostra i nomi delle cartelle in italiano se tu deciderai di usarla come lingua principale del Sistema, ma sotto il cofano i nomi delle cartelle originali saranno sempre in inglese (te ne accorgi navigando nelle cartelle da Terminale). La “Scrivania” altro non è che la cartella Desktop, Immagini sarà Pictues, Download sembra rimanere uguale ma in inglese è Downloads (al plurale), Documenti corrisponderà chiaramente a Documents. I nomi delle cartelle su Dropbox li decidi invece tu (io ho mantenuto quelli uguali solo per mia comodità).

Ogni volta che lo script verrà fatto partire si occuperà lui di fare check tra cartella sorgente e destinazione e farà in maniera tale che le due siano identiche. Il vantaggio sta tutto nel fatto che questo non creerà delle copie fisicamente presenti sul tuo disco, nascendo sui server di Dropbox queste verranno viste come “Online Only” dal tuo client Dropbox installato su macOS.

In conclusione

Lo avrai ormai capito, non è più facile come bere un bicchiere d’acqua, Dropbox ha deciso di combattere contro i collegamenti simbolici vincendo a tavolino senza tenere conto del fatto che là fuori non esistono solo persone alle prime armi che utilizzano l’ottimo servizio di Cloud Storage in coppia fissa con i symlink, per questo motivo bisogna inventarsi stratagemmi vari per permettere a tutti di continuare a tenere due cartelle in sincronia tra loro pur trovandosi – oggi – su due location fisicamente diverse.

Hazel è a pagamento e non tutti vogliono spendere soldi per il software (male, ma tant’è). Posso suggerirti in alternativa di utilizzare da riga di comando rsync (it.wikipedia.org/wiki/Rsync) oppure da interfaccia grafica Synkron. Quest’ultimo però non permette di richiamare script esterni, dovrai utilizzarlo solo come metodo di sincronizzazione tra due cartelle fisicamente presenti entrambe sul disco del tuo Mac.

macOS: è guerra tra Dropbox e i link simbolici, come aggirare l'ostacolo? 8

Si può fare in modo che macOS utilizzi le cartelle fisicamente presenti in Dropbox come fossero quelle originali (invertendo quindi l’ordine dei collegamenti simbolici come spiegato nel mio precedente articolo sulla serie)? Sì. Te lo consiglio? No, affatto. Con quanto raccontato in questo – lungo – articolo dovresti essere in grado di far funzionare tutto e tornare a qualcosa di accettabile. In caso contrario per problemi, ulteriori consigli e critiche (costruttive) l’area commenti è a tua totale disposizione.

Have a good survival! 😏


Ringraziamenti e fonti varie:
ifyouwillit.com/life/auto-sync-your-mac-desktop-folder-with-dropbox/#comment-13463
macworld.com/article/1157339/automate-backup.html
dropboxforum.com/t5/Files-folders/Best-practices-for-using-symlinks-symbolic-links/td-p/349296
macupdate.com/app/mac/41493/symlinker
Condividi l'articolo con i tuoi contatti:

Ho avuto la necessità di spostare numerosi file (10 GB / circa 100.000 file) da una cartella di Dropbox a una di Box.com. Un tempo avrei utilizzato Mover (te ne avevo già parlato), ma il servizio è diventato a pagamento, e non si trattava di materiale che meritava un investimento in denaro, nonostante non avrei voluto comunque perderlo. Poi ho scoperto rclone, e ho fatto centro con qualche riga lanciata in un prompt dei comandi di Windows, sulla macchina che mi fa da Media Center a casa (con una connessione in fibra di Fastweb che non mi ha fatto neanche accorgere del passaggio).

Copia dati in bulk tra servizi Cloud

Te la faccio semplice (anche perché in realtà questo tool permette un’infinità di operazioni, tutte minuziosamente documentate) e ti spiego cosa ho fatto io, così che tu possa replicarlo, ma niente e nessuno ti limita rispetto a ciò che potresti fare utilizzando rclone e i tuoi account di Cloud Storage (anche schedulando le operazioni e automatizzandole completamente).

Scarica rclone da rclone.org/downloads (x86 o x64 in base al tuo sistema operativo), scompatta il file ZIP, non necessita di installazione alcuna, è subito utilizzabile.

Collegamento ai servizi

Apri un prompt dei comandi e spostati nella cartella di rclone, quindi lancia un rclone config per entrare in modalità di configurazione. Quando richiesto, aggiungi un nuovo servizio di Cloud Storage (n):

Scegli un nome “parlante” (che ti permetta immediatamente di capire di che account si tratta) ma che non contenga spazi al suo interno (fidati, è per tua comodità, ma se proprio devi utilizza un “_“), per esempio “googledrive“. Ti verrà ora presentata la lista degli storage compatibili, inserisci manualmente il nome di quello che ti interessa (per esempio, per Google Drive dovrai scrivere “drive“):

Copia dati in bulk tra servizi Cloud con rclone

Ti verranno richiesti dei dati che quasi certamente non possiedi già (client_id e client_secret per poter accedere al tuo account di Google Drive), premi invio in corrispondenza di entrambi e arriva alla fatidica domanda che ti chiederà di utilizzare la configurazione automatica, quindi procedi in questa modalità (rispondi “y” quando richiesto), così verrà aperta una scheda del browser in cui potrai autenticarti e confermare l’accesso alle tue risorse, chiudi pure la scheda:

Storage> drive
Google Application Client Id - leave blank normally.
client_id>
Google Application Client Secret - leave blank normally.
client_secret>
Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n>y

Il codice verrà catturato in autonomia da rclone, tu dovrai solo rispondere alle ulteriori domande a video (se si tratta di un account di Team, nel caso di Google Drive), poi ti verrà mostrato il token di accesso recuperato, è ciò che serve per “parlare” con quel Cloud Storage, dai un’ultima conferma con “y” quando richiesto.

Hai terminato la configurazione. Puoi / devi replicarla per gli altri servizi di Cloud Storage, o almeno con un altro se la tua intenzione è quella di copiare dati tra due di quelli su cui sei registrato.

Move dei dati

Fai riferimento a questo documento: rclone.org/commands/rclone_move. Io ti riepilogo ancora una volta i passaggi.

Dato per scontato che tu abbia aggiunto almeno un altro account di Cloud Storage, puoi fare un “dir” delle cartelle che hai su un account Cloud lanciando un rclone lsd dbox: (dove dbox è il nome che io ho dato al mio account Dropbox configurato, dovrai sostituirlo con quello scelto da te!), mantieni i due punti finali (:), altrimenti otterrai errore.

Io, che la cartella da spostare l’ho salvata in una sotto-cartella di un’altra sotto-cartella, arrivo a ottenere una cosa simile:

C:\temp\rclone-v1.38-windows-amd64>rclone lsd "dbox:laboratorio\temp\Test rclone"
 -1 2017-12-02 17:05:33 -1 spostami

Se devi esplorare cartelle che nel nome contengono degli spazi, ti basterà racchiudere il tutto tra apici. Per ottenere una lista completa dei file oltre che delle cartelle, sostituisci lsd con ls, per capirci:

C:\temp\rclone-v1.38-windows-amd64>rclone ls "dbox:laboratorio\temp\Test rclone"
 0 spostami/Nuovo Documento di Microsoft Word.docx
 6559 spostami/Nuovo Foglio di lavoro di Microsoft Excel.xlsx
 59904 spostami/Nuovo Microsoft Publisher Document.pub
 0 spostami/Nuovo Presentazione di Microsoft PowerPoint.pptx
 0 spostami/Nuovo documento di testo.txt

Veloce giro anche su Google Drive per capire dove spostare la cartella:

C:\temp\rclone-v1.38-windows-amd64>rclone lsd googledrive:
 -1 2013-08-27 14:31:01 -1 ABPXFiles
 -1 2015-10-06 19:23:15 -1 Apps
 -1 2012-11-13 14:47:41 -1 Archivio
 -1 2013-11-12 14:56:02 -1 Mozilla Italia
 -1 2012-11-13 14:48:37 -1 Personali
 -1 2017-12-02 15:59:13 -1 Test rclone

È fatta. La cartella “spostami” che si trova nella sorgente (Test rclone su Dropbox) dovrà finire nella medesima sulla destinazione (Test rclone su Google Drive). Il comando Move di rclone viene quindi in soccorso:

rclone move "dbox:laboratorio\temp\Test rclone" "googledrive:Test rclone"

Salvo errori, il risultato è quello aspettato:

C:\temp\rclone-v1.38-windows-amd64>rclone ls "googledrive:Test rclone"
 0 spostami/Nuovo Documento di Microsoft Word.docx
 6559 spostami/Nuovo Foglio di lavoro di Microsoft Excel.xlsx
 59904 spostami/Nuovo Microsoft Publisher Document.pub
 0 spostami/Nuovo Presentazione di Microsoft PowerPoint.pptx
 0 spostami/Nuovo documento di testo.txt

rclone ricreerà –se necessario– anche l’albero cartelle che nella sorgente c’è ma che non trova corrispondenza nella destinazione, così da mantenere lo stesso identico ordine per tutti i file che andrai a copiare / muovere / sincronizzare i tuoi dati.

Cosa conviene ricordarsi

Nel caso in cui ti dovesse servire ficcare il naso nel file di configurazione (lo sconsiglio, ma può tornare utile, io l’ho fatto per operare una modifica manualmente e per replicare la medesima configurazione su una diversa postazione), ricordati che potrai trovarlo nella tua cartella utente (%UserProfile%), quindi in .config\rclone.

Qui –salvo modifiche future del programma– troverai un file chiamato rclone.conf. è lui a contenere i nomi delle tue connessioni e relativi token di accesso.

Potrai sempre (da prompt dei comandi) leggerlo anche dalla riga di comando di rclone, semplicemente lanciando il comando rclone config show.

That’s all folks!

Probabilmente hai trovato il metodo giusto per spostare i tuoi file, o magari per tenerli sincronizzati costantemente tra più servizi Cloud :-)

Condividi l'articolo con i tuoi contatti: