Workflow Tips Hvordan lagre filer på to steder samtidig

Nylig ønsket jeg å sikkerhetskopiere UDK 3-prosjektfilene til Dropbox, men UDK krever at prosjektfilene skal være i samme katalog som selve 4GB-installasjonen, og 4GB er altfor stor for Dropbox! I denne artikkelen lærer du hvordan du kan løse dette problemet ved å gjøre at filer ser ut til å være på to steder samtidig, ved hjelp av harde koblinger, symbolske lenker, og veikryss.

Forhåndsvis bildeikonet av P. J. Onori.


Det grunnleggende konseptet

Når du defragmenterer harddisken din og informasjonen er flyttet, slutter ingen av de lagrede filene dine bare fordi informasjonen er lagret på et annet sted. Dette skyldes at operativsystemet har et abstraksjonslag som administrerer alt dette. I hovedsak er det du klikker for å åpne et bilde eller kjørbar, bare en link til ønsket fil eller data.

Utvidelse på dette, kan du trekke fra at du kan ha mer enn en lenke til samme punkt; foo.exe og bar.exe kan åpne nøyaktig samme program!

La oss få litt mer teknisk ...

Tips: Dette er faktisk en funksjon av POSIX-kompatible filsystemer, for eksempel NTFS. Når det blir sagt, vil dette IKKE fungere på FAT, FAT32, exFAT og ReFS.

Hard Links

Hard linker ligner på fil snarveier; De lar deg få tilgang til den samme filen på forskjellige steder. Hovedforskjellen er at dette implementeres på selve filsystemet, så når du oppretter en hard link til en fil, oppretter du bare en ny Navn for det, og det vil være nøyaktig samme fil, med begge navn peker på nøyaktig samme sted i harddisken.

Hvis du gjør noen endringer i filen via noen av "navnene" (det vil si hvis du åpner den opprinnelige filen eller en av de harde koblingene og endrer den), vil endringene bli forplantet til alle de andre stedene som filen eksisterer, i forhold til filattributtene og filen seg selv.

Hver fil vil eksistere til alle de harde koblingene er slettet; Når det skjer, er plassen som brukes av filen, erklært som gratis. (Du kan bruke et filgjenoppretting verktøy for å få filen tilbake, men det er ikke garantert å jobbe.)

Junctions (eller Junction Points)

Harde lenker er å filer hva veikryss er til kataloger, partisjoner eller volumer, på (og bare på) det samme systemet. Begge tolkes på operativsystemnivå og er derfor gjennomsiktige for programmer og brukere.

Symboliske lenker

I motsetning til ovenstående, symbolske lenker kan brukes til både filer og mapper, og dermed i essens og oppfatning, de er virkelig lik snarveier.

Forskjellen er, en symbolsk lenke peker til den opprinnelige filbanen, i stedet for filens plassering på harddisken. Dette betyr at hvis du endrer innholdet i filen, vil en symbolsk lenke fortsatt peke på den (og vil gjenspeile endringene), men hvis du endrer Navn av den opprinnelige filen, vil den symbolske lenken ikke lenger peke på den.


Praktiske applikasjoner

Jeg har brukt dette til å løse noen få praktiske problemer.

UDK 3 Prosjektledelse Mareritt

Alle som har jobbet med UDK 3 vet at, selv om motoren er god, er prosjektstyrings arbeidsflyt tungt, for eksempel er det ikke trivielt å håndtere flere prosjekter i samme installasjon, slik at utviklere vanligvis har flere installasjoner for flere prosjekter. Det blir verre hvis du begynner å tenke på å sikkerhetskopiere prosjektet ditt, som jeg nevnte ovenfor.

For mine private prosjekter bruker jeg alltid to backup løsninger: kildekontroll og sky backup, med henholdsvis BitBucket og Dropbox. Å sette opp kildekontroll av koden din i UDK er trivial, men hva om du vil sikkerhetskopiere ditt egendefinerte prosjekt med en cloud backup-løsning som Dropbox som krever at alle filene er i en bestemt systemmappe?

Her er min løsning:

  • I mappen for sky backup må du gjenskape mappestrukturen for dine egendefinerte prosjektfiler, slik at det bare er mulig å kopiere og lime inn i en annen UDK-installasjon. (Dette er en ekstra bonus og hjelper hvis du vil ta prosjektet ditt på en USB-penn til en frakoblet enhet.)
  • Bekreft at prosjektfilene dine (inkludert UDK-konfigurasjonsfiler som setter opp ditt tilpassede prosjekt) er riktig plassert.
  • Opprett kryss i den egendefinerte prosjektmappen til UDK-installasjonen, og hardt koblinger for de isolerte filene utenfor disse mappene.

Tips: Du kan ikke bruke symbolske lenker; UDK vil oppdage det og kaste en feil.

Et velorganisert musikkbibliotek

Jeg har alltid hatt problemer med måten jeg organisert musikkbiblioteket på; siden jeg aldri var fan av å bruke apps som iTunes, og jeg ønsket at harddisken skulle bli ren og organisert. Etter å ha brukt år på å prøve forskjellige tilnærminger, var den jeg likte mest, å ha en mappe per artist og, inne, de respektive artist-singlene og flere mapper per album.

Det er alt bra, til du begynner å komme over singler av en artist med en annen tjue. Hva skal du gjøre med det, kopier samme fil til hver kunstnerens mappe? Nei; bruk vanskelige lenker!

  • Siden det alltid er en artist som tar eierskapet til sangen, plasserer du sangen i den artistens mappe.
  • Lag hardt koblinger av samme sang til hver utvalgt kunstnerens mappe.

Hendene på!

Slik setter du disse koblingene opp på de tre hovedoperativsystemene.

Windows

I Windows kan du gjøre dette ved å bruke kommandolinjeprøven uten å installere noe, eller gjennom Explorer GUI etter installasjonen av et lite verktøy kalt Link Shell Extension.

Hvis du bruker kommandolinjen, åpner du en forhøyet kommandolinjeprompt (det vil si en med administrative rettigheter), skriv inn mklink, og trykk Tast inn. Du får se hjelpsinformasjonen som forklarer hvordan du oppretter vanskelige koblinger, veikryss og katalogsymboliske lenker. For eksempel kan du opprette en hard kobling mellom to tekstfiler ved å ringe mklink / H c: \ file1.txt c: \ file2.txt.

For å gjøre dette via Utforsker, last ned og installer Link Shell Extension. (Dette er min foretrukne løsning som den har utvidet og nyttig funksjonalitet som volum poeng og overlegg ikoner.) Arbeidsflyten er veldig grei; Du kan se det i aksjon og lære å bruke det på verktøyets nettside.

Linux

I søket fant jeg ikke en total GUI-løsning for Linux; hvis du vet om en, vennligst la den stå i kommentarene.

Hvis du bruker Terminal, kan du bruke ln kommandoen for å lage noen vanskelige lenker og symbolske lenker. For eksempel, prøv I fooOriginal barLink. Wikibooks har en enkel guide til ln, eller du kan lese hele beskrivelsen.

Det er en delvis GUI-løsning: I Ubuntu (og muligens andre Linux-varianter) kan du opprette symbolske linker ved å dra en fil med den midtre museknappen og velge Link her.

Dessverre har jeg ikke funnet noen GUI-applikasjoner som gjør det mulig å opprette hardlink.

Mac OS X

OS X er et spesielt tilfelle, da katalogen harde lenker er kjent for å skape alle slags problemer. I tillegg er det et annet begrep, som ligner de andre, men mer avanserte: an alias.

Aliaser ligner på symbolske lenker, men implementeres på et høyere nivå og mer robust struktur. De kan kobles til filer og mapper hvor som helst, inkludert nettverkslagre, ved hjelp av en unik ID. En av de beste egenskapene til aliaser er at de holder faner på filplasseringsendringer; det vil si, de bryter ikke når den opprinnelige filen flyttes til et annet sted. Dessverre kan enkelte programmer ha et problem med å følge dem med målet.

På den annen side er symbolske lenker (eller symlinker) er systemfiler med lavt nivå som inneholder banen til målet; de bryter når du flytter den opprinnelige filen, men alle programmer som bruker det, kommer til ønsket sted. Symlinks er flott å bruke med forhåndsdefinerte system- eller applikasjonsmapper, eller når du vil flytte brukeren Dokumenter eller e-postbufferen til en annen stasjon.

Tips: Mac OS-brukere anbefaler at du holder deg til aliaser og symbolske lenker der det er mulig.

I terminalen kan du bruke ln kommando akkurat som i linux.

I GUI kan du bruke kontekstmenyen til å lage et alias ved å høyreklikke på en fil eller mappe. Alternativt kan du opprette symbolske lenker med appen SymbolicLinker.

Et tredje alternativ er å skrive din egen kode eller kompilere koden fra dette GitHub-depotet


Andre brukstilfeller

Jeg drar videre og lengre bort fra spillutviklingen her, men jeg synes det er viktig å vise det mangfoldet av problemer du kan løse med dette konseptet, slik at du er godt forberedt på å bruke den når det er neste passende i din gamedev-arbeidsflyt!

Flytte innstillingsfiler eller nøkkelkataloger

De fleste applikasjoner er ikke fleksible angående brukerens Innstillinger-sti, slik at du kan bruke koblinger for å overvinne dette problemet hvis du vil sikkerhetskopiere informasjonen eller beholde den separat og organisert andre steder.

I Linux kan du også bruke symbolske koblinger til å sikkerhetskopiere hjemmemappen til en annen stasjon:

  • Kopier hjemmemappen til en annen stasjon eller partisjon,
  • Formater systempartisjonen din med en ny installasjon.
  • Opprett en symbolsk lenke til ny system-hjemmemappe. (Hvis du vet bash, kan du lage et skript som gjør dette for deg, noe som gjør det enkelt å ha nye installasjoner av nye versjoner!)

I Windows, spesielt hvis du har en ganske liten SSD, kan du bruke koblinger til å skille Windows-installasjonen fra din Bruker og Programfiler mapper:

  • Installer Windows på SSD-en.
  • Flytt Programfiler og brukere mapper til en egen stasjon og opprette krysser for stiene til de opprinnelige mappene.
  • Hvis du får en Windows Update-feil 80070011, vil du kanskje sjekke denne artikkelen om å fikse den.
  • Eller hvis du har dual boot Linux og Windows, kan du bruke koblinger for å beholde de samme personlige filene på begge operativsystemene. Dette er spesielt nyttig i scenarier hvor du trenger tilgang til e-post eller dropbox i begge operativsystemene, men selvfølgelig vil du ikke at filene skal dupliseres på tvers av hver.

    programmering

    Du kan opprette ett stort program med flere funksjoner som bygger på programnavnet for å bestemme hvilken funksjon den skal utføre. (Det vil si, den samme applikasjonen har flere harde koblinger som bare er forskjellige i navnet.) Dette ble faktisk gjort i gamle Unix-systemer, hvor mv, cp og rm kjørte samme kjørbare fil. Hvis du tenker på det, kan det være å flytte en fil i verste fall cp og rm drift, og med denne metoden kan du dele mesteparten av koden og beholde krav til lagringsplass til et minimum.

    Mens jeg forsket på dette, prøvde jeg det i C # og Windows 8.1; i min forskning har jeg funnet ut at det er mange måter å få filnavnet til et program på, men bare noen av disse metodene kan hente filnavnet til en hard link.

    Ovenstående bilde viser et testprogram jeg laget for å demonstrere dette problemet. Som du kan se, er filnavnet til det første vinduet OriginalFileName.exe og den andre er HardlinkedFileName.exe. Koden som vises er koden som er nødvendig for de viste resultatene. Du kan få koden for denne applikasjonen på denne GitHub repo.

    Endelig kan du som webutvikler finne ut at du har samme problemer som jeg skisserte for UDK 3-utvikling, spesielt hvis du bruker LAMP, WAMP eller lignende. Du kan kode et skript for å lage vanskelige koblinger og symbolske lenker til webområdet ditt, slik at filene kan være hvor som helst på lagringsenhetene dine, men du trenger ikke å endre noe for å teste siden.


    Konklusjon

    Ikke forvent å bruke dette på daglig basis, men forvent å føle deg velsignet når du har et problem som lett kan løses med dette. Det er en av de tingene å holde deg i bakhodet fordi det en dag vil være nyttig å vite.