flytta filer i Linux kan verka relativt enkelt, men det finns fler alternativ tillgängliga än de flesta inser. Den här artikeln lär nybörjare hur man flyttar filer i GUI och på kommandoraden, men förklarar också vad som faktiskt händer under huven, och adresser kommandoradsalternativ som många upplever användare har sällan utforskat.
flytta vad?
innan du gräver i rörliga filer är det värt att titta närmare på vad som faktiskt händer när du flyttar filsystemobjekt., När en fil skapas tilldelas den till en inod, som är en fast punkt i ett filsystem som används för datalagring. Du kan vad inode maps till en fil med kommandot ls:
$ ls --inode example.txt
7344977 example.txt
När du flyttar en fil flyttar du faktiskt inte data från en inod till en annan, du bara tilldela filobjektet ett nytt namn eller filsökväg. Faktum är att en fil behåller sina behörigheter när den flyttas, eftersom det inte ändras eller skapas om en fil.
fil och katalog inoder innebär Aldrig arv och dikteras av själva filsystemet., Inode uppdrag är sekventiell baserat på när filen skapades och är helt oberoende av hur du organiserar din dator. En fil” inuti ” en katalog kan ha ett lägre inodnummer än dess överordnade katalog eller en högre. Till exempel:
$ mkdir foo
$ mv example.txt foo
$ ls --inode
7476865 foo
$ ls --inode foo
7344977 example.txt
När du flyttar en fil från en hårddisk till en annan, är det dock mycket troligt att inoden ändras. Detta händer eftersom de nya data måste skrivas på ett nytt filsystem. Av denna anledning, i Linux är handlingen att flytta och byta namn på filer bokstavligen samma åtgärd., Oavsett om du flyttar en fil till en annan katalog eller till samma katalog med ett nytt namn, utförs båda åtgärderna av samma underliggande program.
den här artikeln fokuserar på att flytta filer från en katalog till en annan.
flytta med en mus
GUI är en vänlig och, för de flesta, bekant lager av abstraktion ovanpå en komplex samling av binära data. Det är också det första och mest intuitiva sättet att flytta filer på Linux. Om du är van vid skrivbordsupplevelsen, i Generisk mening, vet du förmodligen redan hur du flyttar filer runt hårddisken., I GNOME-skrivbordet är till exempel standardåtgärden när du drar och släpper en fil från ett fönster till ett annat att flytta filen istället för att kopiera den, så det är förmodligen en av de mest intuitiva åtgärderna på skrivbordet:
Dolphin-filhanteraren i KDE Plasma-skrivbordet är som standard att uppmana användaren till en åtgärd. Att hålla Shift-tangenten medan du drar en fil tvingar en rörelseåtgärd:
flytta på kommandoraden
skalkommandot avsett för att flytta filer på Linux, BSD, Illumos, Solaris och MacOS är mv., Ett enkelt kommando med en förutsägbar syntax, MV <källa> <destination> flyttar en källfil till den angivna destinationen, var och en definierad av antingen en absolut eller relativ sökväg. Som tidigare nämnts är mv ett sådant vanligt kommando för POSIX-användare att många av dess ytterligare modifierare i allmänhet är okända, så den här artikeln ger några användbara modifierare till din uppmärksamhet om du är ny eller erfaren.,
inte alla MV-kommandon skrevs av samma personer, så du kan ha GNU mv, BSD mv eller Sun mv, beroende på ditt operativsystem. Kommandoralternativ skiljer sig från implementering till implementering (BSD mv har inga långa alternativ alls) så se din MV man-sida för att se vad som stöds, eller installera din föredragna version istället (det är lyxen av öppen källkod).,
flytta en fil
för att flytta en fil från en mapp till en annan med mv, kom ihåg syntaxen MV<källa><destination>. Till exempel för att flytta filexemplet.txt i katalogen dokument:
$ touch example.txt
$ mv example.txt ~/Documents
$ ls ~/Documents
example.txt
precis som när du flyttar en fil genom att dra och släppa den på en mappikon ersätter det här kommandot inte dokument med exempel.txt. I stället upptäcker mv att dokument är en mapp och placerar exemplet.txt fil i det.,
Du kan också, bekvämt, byta namn på filen när du flyttar den:
$ touch example.txt
$ mv example.txt ~/Documents/foo.txt
$ ls ~/Documents
foo.txt
det är viktigt eftersom det gör att du kan byta namn på en fil även när du inte vill flytta den till en annan plats, som så:
$ touch example.txt$ mv example.txt foo2.txt$ lsfoo2.txt
flytta en katalog
kommandot mv skiljer inte en fil från en katalog som cp gör., Du kan flytta en katalog eller en fil med samma syntax:
$ touch file.txt
$ mkdir foo_directory
$ mv file.txt foo_directory
$ mv foo_directory ~/Documents
flytta en fil säkert
om du kopierar en fil till en katalog där en fil med samma namn redan finns, ersätter MV-kommandot målfilen med den du flyttar, som standard. Detta beteende kallas clobbering,och ibland är det precis vad du tänker. Andra gånger är det inte.
vissa distributioner alias (eller du kan skriva din egen) MV till MV –interactive, som uppmanar dig att bekräfta. Vissa gör det inte., Hur som helst kan du använda alternativet — interactive eller-i för att se till att mv ber om bekräftelse om två filer med samma namn är i konflikt:
$ mv --interactive example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'?
om du inte vill ingripa manuellt, använd –no-clobber eller-n istället. Denna flagga förkastar tyst åtgärden Flytta i händelse av konflikt. I det här exemplet, en fil som heter exempel.,txt finns redan i ~/Documents, så det flyttas inte från den aktuella katalogen enligt instruktionerna:
$ mv --no-clobber example.txt ~/Documents
$ ls
example.txt
flytta med säkerhetskopior
om du använder GNU mv finns det alternativ för säkerhetskopiering som erbjuder ett annat sätt att flytta säkert. För att skapa en säkerhetskopia av alla motstridiga målfiler, använd alternativet-b:
$ mv -b example.txt ~/Documents
$ ls ~/Documents
example.txt example.txt~
den här flaggan säkerställer att MV Slutför åtgärden Flytta, men skyddar även alla befintliga filer på destinationsplatsen.,
ett annat GNU-säkerhetskopieringsalternativ är –backup, som tar ett argument som definierar hur säkerhetskopian heter:
- befintlig: om numrerade säkerhetskopior redan finns i destinationen skapas en numrerad säkerhetskopia. Annars används det enkla systemet.
- inget: skapar inte en säkerhetskopia även om –backup är inställd. Det här alternativet är användbart för att åsidosätta ett MV-alias som anger alternativet säkerhetskopiering.
- numrerad: lägger till målfilen med ett nummer.,
- simple: lägger till målfilen med en~, som bekvämt kan döljas från din dagliga vy med alternativet — ignore-backups för ls.
till exempel:
ett standard backup-system kan ställas in med miljövariabeln VERSION_CONTROL. Du kan ställa in miljövariabler i din~/.bashrc-fil eller dynamiskt före kommandot:
alternativet — backup respekterar fortfarande alternativet –interactive eller-i, så det uppmanar dig fortfarande att skriva över målfilen, även om det skapar en säkerhetskopia innan du gör det:
Du kan åsidosätta-i med alternativet –force eller-f.,
alternativet –backup är inte tillgängligt i BSD mv.
flytta många filer samtidigt
När du flyttar flera filer, behandlar MV den slutliga katalogen som heter som destination:
$ mv foo bar baz ~/Documents
$ ls ~/Documents
foo bar baz
om det slutliga objektet inte är en katalog, returnerar MV ett fel:
$ mv foo bar baz
mv: target 'baz' is not a directory
syntaxen för GNU MV är ganska flexibel., Om du inte kan tillhandahålla kommandot MV med destinationen som det slutliga argumentet, använd alternativet –target-directory eller-t:
$ mv --target-directory=~/Documents foo bar baz
$ ls ~/Documents
foo bar baz
det här är särskilt användbart när du konstruerar MV-kommandon från utmatningen från något annat kommando, till exempel sökkommandot, xargs eller GNU parallellt.
flytta baserat på mtime
med GNU mv kan du definiera en flytt åtgärd baserat på om filen som flyttas är nyare än målfilen den skulle ersätta., Det här alternativet är möjligt med alternativet — update eller-u och är inte tillgängligt i BSD mv:
detta resultat är uteslutande baserat på filernas modifieringstid, inte på en diff av de två filerna, så använd den med försiktighet. Det är lätt att lura mv med bara ett beröringskommando:
självklart är detta inte den mest intelligenta uppdateringsfunktionen som finns tillgänglig, men det erbjuder grundläggande skydd mot att skriva över senaste data.
flytta
det finns fler sätt att flytta data än bara MV-kommandot, men som standardprogram för jobbet är mv ett bra universellt alternativ., Nu när du vet vilka alternativ du har tillgängliga kan du använda MV smartare än någonsin tidigare.