Suggerimento per il flusso di lavoro come mantenere i file in due posizioni contemporaneamente

Recentemente, volevo eseguire il backup dei miei file di progetto UDK 3 sul mio Dropbox, ma UDK richiede che i file di progetto si trovino nella stessa directory dell'installazione (4GB) stessa e 4 GB è troppo grande per il mio Dropbox! In questo articolo, imparerai come puoi risolvere questo problema facendo apparire i file in due posti contemporaneamente, usando collegamenti fisici, collegamenti simbolici, e giunzioni.

Anteprima icona immagine di P. J. Onori.


Il concetto di base

Quando si deframmenta l'unità disco rigido e le informazioni vengono spostate, nessuno dei file salvati smette di funzionare solo perché le informazioni sono archiviate in una posizione diversa. Questo perché il tuo sistema operativo ha un livello di astrazione che gestisce tutto questo; in sostanza, ciò che fai clic per aprire un'immagine o un eseguibile è solo un collegamento al file o ai dati desiderati.

Espandendoti, puoi dedurre che potresti avere più di un link al stesso articolo; foo.exe e bar.exe potrebbe aprire lo stesso identico programma!

Diamo un po 'di più tecnico ...

Mancia: Questa è in realtà una funzionalità dei file system conformi a POSIX, come NTFS. Detto questo, questo NON funzionerà su FAT, FAT32, exFAT e ReFS.

Collegamenti duri

Collegamenti duri sono simili alle scorciatoie di file; ti permettono di avere accesso allo stesso file in luoghi diversi. La differenza principale è che questo è implementato sul file system stesso, quindi, quando crei un hard link su un file, stai solo creando un nuovo nome per questo, e sarà esattamente lo stesso file, con entrambi i nomi che puntano alla stessa identica posizione nel disco rigido.

Se si apportano modifiche al file tramite qualunque dei "nomi" (ovvero, se apri il file originale o uno degli hard link e lo modifichi), le modifiche verranno propagate a tutte le altre posizioni del file, in relazione agli attributi del file e al file si.

Ogni file esisterà fino a quando tutti i suoi hard link saranno cancellati; quando ciò accade, lo spazio utilizzato dal file è dichiarato come libero. (Puoi usare uno strumento di ripristino file per riavere il tuo file, ma non è garantito che funzioni.)

Giunzioni (o punti di congiunzione)

Gli hard link riguardano i file giunzioni sono a directory, partizioni o volumi, su (e solo su) lo stesso sistema. Entrambi sono interpretati a livello di sistema operativo e, di conseguenza, sono trasparenti per programmi e utenti.

Collegamenti simbolici

A differenza di quanto sopra, collegamenti simbolici può essere usato sia per file che per cartelle, quindi, in essenza e percezione, sono molto simili alle scorciatoie.

La differenza è che un collegamento simbolico punta al percorso del file originale, piuttosto che alla posizione del file sul disco rigido. Ciò significa che se cambi il contenuto del file, un link simbolico lo punterà ancora (e rifletterà le modifiche), ma se cambi il nome del file originale, il collegamento simbolico non punta più ad esso.


Applicazioni pratiche

Ho usato questo per risolvere alcuni problemi pratici.

UDK 3 Project Management Nightmare

Chiunque abbia lavorato con UDK 3 sa che, sebbene il motore sia ottimo, il flusso di lavoro di gestione del progetto è ingombrante, ad esempio, non è banale gestire più progetti nella stessa installazione, quindi gli sviluppatori di solito hanno più installazioni per più progetti. Diventa peggio se inizi a pensare al backup del tuo progetto, come ho detto sopra.

Per i miei progetti privati, utilizzo sempre due soluzioni di backup: controllo del codice sorgente e backup del cloud, rispettivamente con BitBucket e Dropbox. L'impostazione del controllo del codice sorgente in UDK è banale, ma, se si desidera eseguire il backup del progetto personalizzato con una soluzione di backup cloud come Dropbox che richiede che tutti i file si trovino in una cartella di sistema specifica?

Ecco la mia soluzione:

  • Nella cartella di backup del cloud, ricrea la struttura delle cartelle per i file di progetto personalizzati, in modo che sia possibile copiare e incollare semplicemente in un'altra installazione UDK. (Questo è un bonus aggiuntivo e aiuta se vuoi portare il tuo progetto su una penna USB a un dispositivo offline.)
  • Confermare che i file di progetto (inclusi i file di configurazione UDK che configurano il progetto personalizzato) siano posizionati correttamente.
  • Creare giunzioni della cartella del progetto personalizzato sull'installazione UDK e collegamenti fisici per i file isolati all'esterno di tali cartelle.

Mancia: Non è possibile utilizzare collegamenti simbolici; UDK lo rileverà e genererà un errore.

Una biblioteca musicale ben organizzata

Ho sempre avuto problemi con il modo in cui ho organizzato la cartella della mia libreria musicale; dal momento che non sono mai stato un fan di usare app come iTunes, e volevo che il mio disco rigido fosse pulito e organizzato. Dopo aver passato anni a provare approcci diversi, quello che mi piaceva di più era avere una cartella per artista e, all'interno, i rispettivi singoli dell'artista e più cartelle per album.

Va bene così, finché non inizi a trovare i singoli di un artista che ne presenta altri venti. Che cosa hai intenzione di fare al riguardo, copiare lo stesso file nella cartella di ogni artista? No; usa i collegamenti fisici!

  • Poiché c'è sempre un artista che prende la proprietà della canzone, posiziona il brano nella cartella di quell'artista.
  • Crea collegamenti reali della stessa canzone alla cartella di ogni artista in primo piano.

Mani su!

Ecco come impostare questi collegamenti sui tre principali sistemi operativi.

finestre

In Windows puoi farlo usando il prompt della riga di comando senza installare nulla o tramite la GUI di Explorer dopo l'installazione di un piccolo strumento chiamato Link Shell Extension.

Se si utilizza la riga di comando, quindi si apre un prompt elevato della riga di comando (ovvero uno con privilegi amministrativi) mklink, e premere accedere. Vedrai le informazioni della guida che spiegano come creare collegamenti fisici, giunzioni e collegamenti simbolici di directory. Ad esempio, è possibile creare un collegamento fisico tra due file di testo chiamando mklink / H c: \ file1.txt c: \ file2.txt.

Per fare ciò tramite Explorer, prima scarica e installa Link Shell Extension. (Questa è la mia soluzione preferita in quanto ha funzionalità estese e utili come i punti di volume e le icone di sovrapposizione.) Il flusso di lavoro è davvero semplice; puoi vederlo in azione e imparare come usarlo nella pagina web dell'utilità.

Linux

Nella mia ricerca non ho trovato una soluzione GUI completa per Linux; se ne conoscete uno, per favore lasciatelo nei commenti.

Se si utilizza il terminale, è possibile utilizzare il ln comando per creare qualsiasi hard link e link simbolici. Ad esempio, prova In foo BarLink originale. Wikibooks ha una semplice guida per ln, oppure puoi leggere le specifiche complete.

Esiste una soluzione GUI parziale: in Ubuntu (e probabilmente in altre varianti di Linux), puoi creare collegamenti simbolici trascinando un file con il pulsante centrale del mouse e scegliendo Link qui.

Sfortunatamente, non ho trovato alcuna applicazione GUI che consenta la creazione di collegamenti complessi.

Mac OS X

OS X è un caso speciale, poiché è noto che gli hard link di directory creano tutti i tipi di problemi. Inoltre, c'è un altro concetto, simili agli altri ma più avanzati: a alias.

Gli alias sono simili ai collegamenti simbolici, ma sono implementati in un livello superiore e una struttura più robusta. Possono essere collegati a file e cartelle ovunque, inclusi archivi di rete, utilizzando un ID univoco. Una delle migliori caratteristiche degli alias è che tengono sotto controllo le modifiche alla posizione dei file; cioè, non si rompono quando il file originale viene spostato in un altro posto. Sfortunatamente, alcune applicazioni possono avere un problema nel seguirle nella destinazione.

D'altra parte, collegamenti simbolici (o link simbolici) sono file di sistema di basso livello che contengono il percorso del target; si interrompono quando si sposta il file originale, ma qualsiasi applicazione che lo utilizza arriverà nel punto desiderato. I collegamenti simbolici sono ottimi da utilizzare con cartelle di sistema o applicazioni predefinite o quando si desidera spostare la cache dei documenti o della posta elettronica dell'utente su un'altra unità.

Mancia: Gli utenti Mac OS consigliano di attenersi ad alias e collegamenti simbolici laddove possibile.

Nel Terminale, puoi usare il ln comando proprio come in Linux.

Nella GUI, è possibile utilizzare il menu di scelta rapida per creare un alias facendo clic con il pulsante destro del mouse su un file o una cartella. In alternativa, puoi creare collegamenti simbolici con l'app SymbolicLinker.

Una terza opzione è scrivere il proprio codice o compilare il codice da questo repository GitHub


Altri casi d'uso

Sto andando alla deriva sempre più lontano dallo sviluppo del gioco qui, ma penso che sia importante mostrare la varietà di problemi che puoi risolvere con questo concetto, in modo che tu sia ben preparato a usarlo quando è il prossimo appropriato nel tuo flusso di lavoro gamedev!

Spostamento di file di impostazioni o directory chiave

La maggior parte delle applicazioni non è flessibile per quanto riguarda il percorso delle impostazioni dell'utente, quindi puoi utilizzare i link per superare questo problema nel caso in cui desideri eseguire il backup delle informazioni o tenerle separate e organizzate altrove.

In Linux, è possibile utilizzare anche collegamenti simbolici per eseguire il backup della cartella Inizio su un'unità diversa:

  • Copia la tua cartella principale in un'altra unità o partizione,
  • Formattare la partizione di sistema con una nuova installazione.
  • Creare un collegamento simbolico alla nuova cartella Inizio del sistema. (Se conosci bash, potresti creare uno script che faccia questo per te, rendendo più semplice avere nuove installazioni di nuove versioni!)

In Windows, soprattutto se si dispone di un SSD piuttosto piccolo, è possibile utilizzare i collegamenti per separare l'installazione di Windows dal proprio Utente e File di programma cartelle:

  • Installa Windows sul tuo SSD.
  • Muovi il File di programma e utenti cartelle su un'unità separata e creare giunzioni per i percorsi delle cartelle originali.
  • Se ricevi un errore di aggiornamento di Windows 80070011, potresti voler controllare questo articolo per correggerlo.
  • Oppure, se si esegue il dual-boot di Linux e Windows, è possibile utilizzare i collegamenti per mantenere gli stessi file personali su entrambi i sistemi operativi. Ciò è particolarmente utile in scenari in cui è necessario l'accesso tramite e-mail o Dropbox in entrambi i sistemi operativi, ma, naturalmente, non si desidera duplicare i file su.

    Programmazione

    È possibile creare un grande programma con più funzionalità che si basa sul nome dell'applicazione per determinare quale funzione verrà eseguita. (Cioè, la stessa applicazione ha più collegamenti fisici che differiscono solo nel nome.) Questo è stato effettivamente fatto nei vecchi sistemi Unix, dove mv, cp e rm ha eseguito lo stesso file eseguibile. Se ci pensi, spostare un file nel peggiore dei casi può essere un cp e rm operazione e, con questo metodo, è possibile condividere la maggior parte del codice e mantenere i requisiti di archiviazione degli assembly al minimo.

    Mentre stavo cercando questo ho provato in C # e Windows 8.1; nella mia ricerca ho scoperto che ci sono molti modi per ottenere il nome file di un programma, ma solo alcuni di questi metodi possono recuperare il nome file di un hard link.

    L'immagine sopra mostra un programma di test che ho fatto per dimostrare questo problema. Come puoi vedere, il nome del file della prima finestra è OriginalFileName.exe e quello del secondo è HardlinkedFileName.exe. Il codice mostrato è il codice necessario per i risultati mostrati, rispettivamente. È possibile ottenere il codice per questa applicazione in questo repository GitHub.

    Infine, come sviluppatore web, potresti scoprire che ti imbatti nello stesso tipo di problemi che ho delineato per lo sviluppo di UDK 3, specialmente se utilizzi LAMP, WAMP o simili. È possibile codificare uno script per creare collegamenti rigidi e collegamenti simbolici ai file del sito, in modo che i file possano essere ovunque sui dispositivi di archiviazione, ma non è necessario modificare alcuna cosa per testare il sito.


    Conclusione

    Non aspettarti di usarlo quotidianamente, ma aspettati di sentirti benedetto quando hai un problema facilmente risolvibile. È una di quelle cose da tenere in mente perché un giorno sarà utile saperlo.