Arbetsflöde Tips Så här håller du filer på två platser i taget

Nyligen ville jag säkerhetskopiera min UDK 3-projektfiler till min Dropbox, men UDK kräver att projektfiler är i samma katalog som själva 4GB-installationen och 4GB är alltför stor för min Dropbox! I den här artikeln lär du dig hur du kan lösa detta problem genom att filerna verkar vara på två ställen samtidigt, med hjälp av hårda länkar, symboliska länkar, och korsningar.

Förhandsvisa bildikon av P. J. Onori.


Grundbegreppet

När du defragmenterar din hårddisk och informationen flyttas, upphör ingen av dina sparade filer att fungera bara för att informationen är lagrad på en annan plats. Detta beror på att operativsystemet har ett abstraktionslager som hanterar allt detta. Vad som helst du klickar på för att öppna en bild eller körbar är bara en länk till önskad fil eller data.

Genom att expandera på detta kan du dra av att du kan ha mer än en länk till samma Artikel; foo.exe och bar.exe kan öppna exakt samma program!

Låt oss bli lite mer teknisk ...

Tips: Det här är faktiskt en funktion av POSIX-kompatibla filsystem, till exempel NTFS. Med detta sagt kommer det inte att fungera på FAT, FAT32, exFAT och ReFS.

Hårda länkar

Hårda länkar liknar filgenvägar; De gör det möjligt för dig att få tillgång till samma fil på olika platser. Huvudskillnaden är att det här implementeras på filsystemet själv, så när du skapar en hård länk till en fil skapar du bara en ny namn för det, och det blir exakt samma fil, med båda namnen som pekar på exakt samma plats i hårddisken.

Om du gör några ändringar i filen via några av namnen (det vill säga om du öppnar originalfilen eller en av de hårda länkarna och ändrar den), kommer ändringarna att sprida sig till alla andra platser som filen finns med avseende på filattributen och filen sig.

Varje fil kommer att existera tills alla dess hårda länkar raderas. När det händer är det utrymme som används av filen förklarat som gratis. (Du kan använda ett filåterställningsverktyg för att få din fil tillbaka, men det garanteras inte att det fungerar.)

Junctions (eller Junction Points)

Hårda länkar är att filer vad korsningar är till kataloger, partitioner eller volymer, på (och endast på) samma system. Båda tolkas på operativsystemsnivå och är därför transparenta för program och användare.

Symboliska länkar

Till skillnad från ovanstående, symboliska länkar kan användas för både filer och mappar, alltså i huvudsak och perception, de liknar verkligen genvägar.

Skillnaden är att en symbolisk länk pekar på den ursprungliga filvägen, snarare än till filens plats på hårddisken. Detta innebär att om du ändrar innehållet i filen, kommer en symbolisk länk fortfarande att peka på den (och kommer att spegla ändringarna), men om du ändrar namn av den ursprungliga filen kommer den symboliska länken inte längre att peka på den.


Praktiska tillämpningar

Jag har använt detta för att lösa några praktiska problem.

UDK 3 Projektledning Mardröm

Alla som har arbetat med UDK 3 vet att, trots att motorn är stor, är projektledningens arbetsflöde besvärligt. Det är till exempel inte trivialt att hantera flera projekt i samma installation, så utvecklare brukar ha flera installationer för flera projekt. Det blir värre om du börjar tänka på att säkerhetskopiera ditt projekt, som jag nämnde ovan.

För mina privata projekt använder jag alltid två backuplösningar: källkontroll och cloud backup, med BitBucket och Dropbox respektive. Om du vill säkerhetskopiera ditt anpassade projekt med en cloud backup-lösning som Dropbox som kräver att alla filer finns i en specifik systemmapp?

Här är min lösning:

  • I mappen för säkerhetskopiering av moln, återskapa mappstrukturen för dina anpassade projektfiler, så att det bara går att kopiera och klistra in i en annan UDK-installation. (Detta är en extra bonus och hjälper dig om du vill ta ditt projekt på en USB-penna till en offline-enhet.)
  • Bekräfta att dina projektfiler (inklusive UDK-konfigurationsfiler som har konfigurerat ditt anpassade projekt) är korrekt placerade.
  • Skapa kryssningar i den anpassade projektmappen till UDK-installationen och hårda länkar för de isolerade filerna utanför de här mapparna.

Tips: Du kan inte använda symboliska länkar; UDK kommer att upptäcka det och kasta ett fel.

Ett välorganiserat musikbibliotek

Jag har alltid haft problem med hur jag organiserade min musikbibliotekskatalog; eftersom jag aldrig var fan av att använda appar som iTunes, och jag ville ha min hårddisk ren och organiserad. Efter att ha spenderat många år på olika sätt kunde jag mest ha en mapp per artist och, inuti, respektive artister och flera mappar per album.

Det är allt bra, tills du börjar komma över singlar av en artist med ytterligare tjugo. Vad ska du göra med det, kopiera samma fil till varje artisters mapp? Nej; använd svåra länkar!

  • Eftersom det alltid finns en artist som tar ägandet av låten, placerar du sången i den artistens mapp.
  • Skapa hårda länkar i samma låt till varje listad artisters mapp.

Praktisk!

Så här ställer du in dessa länkar på de tre huvudoperativsystemen.

Windows

I Windows kan du göra det med kommandoraden, utan att installera någonting eller genom Utforskaren GUI efter installationen av ett litet verktyg som heter Link Shell Extension.

Om du använder kommandoraden öppnar du en förhöjd kommandoradfråga (det vill säga en med administrativa behörigheter), skriv in mklink, och tryck på Stiga på. Du får se hjälpinformationen som förklarar hur man skapar hårda länkar, korsningar och katalogiska symboliska länkar. Du kan till exempel skapa en hård länk mellan två textfiler genom att ringa mklink / H c: \ file1.txt c: \ file2.txt.

För att göra detta via Explorer, ladda ner och installera länk Shell Extension. (Det här är min favorit lösning eftersom den har utökad och användbar funktionalitet som volympunkter och överlay-ikoner.) Arbetsflödet är riktigt enkelt; Du kan se den i åtgärd och lära dig hur du använder den på verktygets webbsida.

Linux

I min sökning hittade jag inte en total GUI-lösning för Linux; om du känner till en, vänligen lämna den i kommentarerna.

Om du använder terminalen kan du använda ln kommando för att skapa några hårda länkar och symboliska länkar. Försök till exempel I fooOriginal barLink. Wikibooks har en enkel guide till ln, eller du kan läsa hela specifikationen.

Det finns en delvis GUI-lösning: i Ubuntu (och eventuellt andra Linux-varianter) kan du skapa symboliska länkar genom att dra en fil med den mellersta musknappen och välja Länk här.

Tyvärr har jag inte hittat någon GUI-applikation som gör det möjligt att skapa hård länk.

Mac OS X

OS X är ett speciellt fall, eftersom kataloghårda länkar är kända för att skapa alla möjliga problem. Dessutom finns det ett annat begrepp, liknar de andra men mer avancerade: an alias.

Aliaser liknar symboliska länkar, men implementeras på en högre nivå och mer robust struktur. De kan kopplas till filer och mappar var som helst, inklusive nätverkslagringar, med ett unikt ID. En av de bästa egenskaperna hos alias är att de håller flikar på filplatsändringar. det vill säga de bryter inte när den ursprungliga filen flyttas till en annan plats. Tyvärr kan vissa program ha problem med att följa dem till målet.

Å andra sidan symboliska länkar (eller symlinks) är systemfiler med låg nivå som innehåller sökvägen till målet, De bryter när du flyttar den ursprungliga filen, men alla program som använder den kommer att komma fram till önskad plats. Symlinks är bra att använda med fördefinierade system eller applikationsmappar, eller när du vill flytta din användare Dokument eller e-post cache till en annan enhet.

Tips: Mac OS-användare rekommenderar att du håller med alias och symboliska länkar där det är möjligt.

I terminalen kan du använda ln Kommando precis som i Linux.

I GUI kan du använda snabbmenyn för att skapa ett alias genom att högerklicka på en fil eller mapp. Alternativt kan du skapa symboliska länkar med appen SymbolicLinker.

Ett tredje alternativ är att skriva din egen kod eller kompilera koden från det här GitHub-arkivet


Andra användningsfall

Jag driver längre och längre bort från spelutveckling här men jag tycker att det är viktigt att visa olika problem som du kan lösa med det här konceptet, så att du är väl förberedd att använda den när den är lämpligast i ditt gamedev-arbetsflöde!

Flytta inställningsfiler eller nyckelkataloger

De flesta applikationer är inte flexibla beträffande användarens inställningsväg, så du kan använda länkar för att övervinna problemet om du vill säkerhetskopiera informationen eller behålla den separat och organiserade annorstädes.

I Linux kan du också använda symboliska länkar för att säkerhetskopiera din hemmapp till en annan enhet:

  • Kopiera din hemmapp till en annan enhet eller partition,
  • Formatera din systempartition med en ny installation.
  • Skapa en symbolisk länk till den nya systemhemsmappen. (Om du vet bash kan du skapa ett manus som gör det här för dig, vilket gör det enkelt att ha nya installationer av nya versioner!)

I Windows, speciellt om du har en ganska liten SSD, kan du använda länkar för att skilja din Windows-installation från din Användare och Program filer mappar:

  • Installera Windows på din SSD.
  • Flytta Program filer och användare mappar till en separat enhet och skapa kryssningar för de ursprungliga mapparnas banor.
  • Om du får ett Windows Update-fel 80070011 kan du kolla den här artikeln om hur du fixar den.
  • Eller om du använder dual-boot Linux och Windows, kan du använda länkar för att behålla samma personliga filer på båda operativsystemen. Detta är särskilt användbart i scenarier där du behöver E-post eller Dropbox-åtkomst i båda operativsystemen, men vill naturligtvis inte att dina filer dupliceras över varje.

    Programmering

    Du kan skapa ett stort program med flera funktioner som bygger på applikationsnamnet för att bestämma vilken funktion den ska exekvera. (Det vill säga, samma applikation har flera hårda länkar som endast skiljer sig åt i namnet.) Det var faktiskt gjort i gamla Unix-system, var mv, cp och rm sprang samma körbar fil. Om du funderar på det, kan du flytta en fil i värsta fall ett cp och rm drift och med den här metoden kan du dela det mesta av koden och behålla församlingens lagringskrav till ett minimum.

    Medan jag undersökte detta försökte jag det i C # och Windows 8.1; I min forskning har jag funnit att det finns många sätt att få filnamnet på ett program, men bara några av dessa metoder kan hämta filnamnet på en hård länk.

    Ovanstående bild visar ett testprogram som jag gjorde för att demonstrera detta problem. Som du kan se är filnamnet i det första fönstret OriginalFileName.exe och den andra är HardlinkedFileName.exe. Koden som visas är den kod som krävs för respektive resultat. Du kan få koden för den här applikationen på denna GitHub repo.

    Slutligen kan du som webbutvecklare hitta dig i samma slags problem som jag skisserade för UDK 3-utveckling, speciellt om du använder LAMP, WAMP eller liknande. Du kan koda ett skript för att skapa hårda länkar och symboliska länkar till dina webbplatsfiler, så att filerna kan vara var som helst på dina lagringsenheter, men du behöver inte ändra något för att testa webbplatsen.


    Slutsats

    Förvänta dig inte att använda det på en daglig basis, men förvänta dig att känna dig välsignad när du har ett problem som lätt kan lösas med detta. Det är en av de sakerna att hålla dig bakom dig, för en dag kommer det att vara bra att veta.