het verplaatsen van bestanden in Linux kan relatief eenvoudig lijken, maar er zijn meer opties beschikbaar dan de meeste beseffen. Dit artikel leert beginners hoe bestanden te verplaatsen in de GUI en op de opdrachtregel, maar legt ook uit wat er eigenlijk gebeurt onder de motorkap, en adressen command line opties die veel ervaring gebruikers zelden hebben onderzocht.
wat verplaatsen?
voordat u zich verdiept in het verplaatsen van bestanden, is het de moeite waard om eens nader te kijken naar wat er werkelijk gebeurt bij het verplaatsen van objecten in het bestandssysteem., Wanneer een bestand wordt gemaakt, wordt het toegewezen aan een inode, dat is een vast punt in een bestandssysteem dat wordt gebruikt voor gegevensopslag. Je kunt wat inode aan een bestand toewijst met het ls Commando:
$ ls --inode example.txt
7344977 example.txt
wanneer je een bestand verplaatst, verplaats je de gegevens niet van de ene inode naar de andere, Je wijst het bestandobject alleen een nieuwe naam of bestandspad toe. In feite behoudt een bestand zijn machtigingen wanneer het wordt verplaatst, omdat het verplaatsen van een bestand het niet verandert of opnieuw maakt.
bestand en map-inodes impliceren nooit overerving en worden gedicteerd door het bestandssysteem zelf., Inode-toewijzing is sequentieel op basis van wanneer het bestand is gemaakt en is volledig onafhankelijk van hoe u uw computer organiseert. Een bestand ” in ” een map kan een lager inode nummer hebben dan de bovenliggende map, of een hoger. Bijvoorbeeld:
$ mkdir foo
$ mv example.txt foo
$ ls --inode
7476865 foo
$ ls --inode foo
7344977 example.txt
bij het verplaatsen van een bestand van de ene harde schijf naar de andere, echter, de inode is zeer waarschijnlijk te veranderen. Dit gebeurt omdat de nieuwe gegevens naar een nieuw bestandssysteem moeten worden geschreven. Om deze reden is in Linux de handeling van het verplaatsen en hernoemen van bestanden letterlijk dezelfde actie., Of u nu een bestand naar een andere map verplaatst of naar dezelfde map met een nieuwe naam, beide acties worden uitgevoerd door hetzelfde onderliggende programma.
Dit artikel richt zich op het verplaatsen van bestanden van de ene map naar de andere.
verplaatsen met een muis
De GUI is een vriendelijke en voor de meeste mensen bekende abstractielaag bovenop een complexe verzameling binaire gegevens. Het is ook de eerste en meest intuïtieve manier om bestanden onder Linux te verplaatsen. Als u gewend bent aan de desktop-ervaring, in een algemene zin, dan weet u waarschijnlijk al hoe u bestanden op uw harde schijf kunt verplaatsen., In het GNOME-bureaublad bijvoorbeeld, is de standaard actie bij het slepen en neerzetten van een bestand van het ene venster naar het andere om het bestand te verplaatsen in plaats van het te kopiëren, dus het is waarschijnlijk een van de meest intuïtieve acties op het bureaublad:
De Dolphin-bestandsbeheerder in het KDE Plasma-bureaublad vraagt de gebruiker standaard om een actie. Het ingedrukt houden van de Shift-toets tijdens het slepen van een bestand forceert een verplaatsingsactie:
verplaatsen op de opdrachtregel
Het shell-commando bedoeld voor het verplaatsen van bestanden onder Linux, BSD, Illumos, Solaris en MacOS is MV., Een eenvoudig commando met een voorspelbare syntaxis, mV <bron> <bestemming> verplaatst een bronbestand naar de opgegeven bestemming, elk gedefinieerd door een absoluut of relatief bestandspad. Zoals eerder vermeld, is MV zo ‘ n veelvoorkomend commando voor POSIX-gebruikers dat veel van de extra modifiers over het algemeen onbekend zijn, dus dit artikel brengt een paar nuttige modifiers onder je aandacht, of je nu nieuw of ervaren bent.,
niet alle MV commando ‘ s zijn geschreven door dezelfde mensen, dus je kunt GNU MV, BSD mv, of Sun MV hebben, afhankelijk van je besturingssysteem. Commando opties verschillen van implementatie tot implementatie (BSD mv heeft helemaal geen lange opties) dus refereer naar je MV manual pagina om te zien wat er ondersteund wordt, of installeer in plaats daarvan de gewenste versie (dat is de luxe van open source).,
een bestand verplaatsen
om een bestand van de ene map naar de andere te verplaatsen met mv, onthoud de syntaxis mv <bron> <bestemming> Bijvoorbeeld, om het bestand te verplaatsen voorbeeld.txt in uw map Documenten:
$ touch example.txt
$ mv example.txt ~/Documents
$ ls ~/Documents
example.txt
net als wanneer u een bestand verplaatst door het te slepen naar een mappictogram, vervangt dit commando documenten niet door voorbeeld.txt. In plaats daarvan detecteert mv dat documenten een map zijn en plaatst het voorbeeld.txt-bestand erin.,
u kunt het bestand ook gemakkelijk hernoemen terwijl u het verplaatst:
$ touch example.txt
$ mv example.txt ~/Documents/foo.txt
$ ls ~/Documents
foo.txt
dat is belangrijk omdat het u in staat stelt om een bestand te hernoemen, zelfs als u het niet naar een andere locatie wilt verplaatsen, zoals dit:
$ touch example.txt$ mv example.txt foo2.txt$ lsfoo2.txt
een map verplaatsen
het MV commando maakt geen onderscheid tussen een bestand uit een directory zoals CP dat doet., U kunt een map of een bestand verplaatsen met dezelfde syntaxis:
$ touch file.txt
$ mkdir foo_directory
$ mv file.txt foo_directory
$ mv foo_directory ~/Documents
een bestand veilig verplaatsen
Als u een bestand kopieert naar een map waar een bestand met dezelfde naam al bestaat, vervangt het MV-Commando het doelbestand standaard door degene die u verplaatst. Dit gedrag heet slaan, en soms is het precies wat je van plan bent. Andere keren is het dat niet.
sommige distributies alias (of je zou je eigen kunnen schrijven) MV naar mv –interactive, die je vraagt om bevestiging. Sommigen niet., Hoe dan ook, u kunt de optie –interactive of-i gebruiken om ervoor te zorgen dat mv om bevestiging vraagt in het geval dat twee bestanden met dezelfde naam in conflict zijn:
$ mv --interactive example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'?
Als u niet handmatig wilt ingrijpen, gebruik dan –no-clobber of-n. Deze vlag wijst in stilte de actie van de beweging af in geval van een conflict. In dit voorbeeld, een bestand met de naam example.,txt bestaat al in ~ / Documents, dus het wordt niet verplaatst van de huidige map zoals geïnstrueerd:
$ mv --no-clobber example.txt ~/Documents
$ ls
example.txt
verplaatsen met back-ups
Als u GNU mv gebruikt, zijn er back-upopties die een andere manier van veilig verplaatsen bieden. Om een back-up te maken van een conflicterend doelbestand, gebruik je de optie-b:
$ mv -b example.txt ~/Documents
$ ls ~/Documents
example.txt example.txt~
deze vlag zorgt ervoor dat mv de verplaatsingsactie voltooit, maar beschermt ook alle reeds bestaande bestanden op de bestemmingslocatie.,
een andere optie voor GNU-backup is –backup, waarbij een argument wordt gebruikt dat bepaalt hoe het back-upbestand wordt genoemd:
- bestaande: als er al genummerde back-ups bestaan in de bestemming, dan wordt een genummerde back-up gemaakt. Anders wordt de eenvoudige regeling gebruikt.
- Geen: maakt geen back-up, zelfs niet als — backup is ingesteld. Deze optie is handig om een MV-alias te overschrijven die de back-upoptie instelt.
- genummerd: voegt het doelbestand met een nummer toe.,
- Eenvoudig: voegt het doelbestand toe met een~, die gemakkelijk verborgen kan worden voor uw dagelijkse weergave met de — ignore-backups optie voor ls.
bijvoorbeeld:
een standaard back-upschema kan worden ingesteld met de omgevingsvariabele VERSION_CONTROL. U kunt omgevingsvariabelen instellen in uw~/.bashrc-bestand of dynamisch voor uw opdracht:
de optie –backup respecteert nog steeds de optie –interactive of-i, dus vraagt het u nog steeds om het doelbestand te overschrijven, ook al maakt het een back-up voordat u dit doet:
u kunt-i overschrijven met de optie –force of-f.,
de optie –backup is niet beschikbaar in BSD mv.
veel bestanden tegelijk verplaatsen
bij het verplaatsen van meerdere bestanden behandelt mv de uiteindelijke map met de naam als bestemming:
$ mv foo bar baz ~/Documents
$ ls ~/Documents
foo bar baz
als het uiteindelijke item geen map is, geeft mv een fout terug:
$ mv foo bar baz
mv: target 'baz' is not a directory
de syntaxis van GNU mv is vrij flexibel., Als u het MV commando niet kunt voorzien van de bestemming als het laatste argument, gebruik dan de –target-directory of-T optie:
$ mv --target-directory=~/Documents foo bar baz
$ ls ~/Documents
foo bar baz
Dit is vooral handig bij het construeren van MV commando ‘ s uit de uitvoer van een ander commando, zoals het find Commando, xargs, of GNU Parallel.
verplaatsen op basis van mtime
met GNU mv kunt u een actie verplaatsen definiëren op basis van de vraag of het te verplaatsen bestand nieuwer is dan het doelbestand dat het zou vervangen., Deze optie is mogelijk met de –update of-u optie, en is niet beschikbaar in BSD mv:
Dit resultaat is uitsluitend gebaseerd op de modificatietijd van de bestanden, niet op een diff van de twee bestanden, dus gebruik het voorzichtig. Het is gemakkelijk om mv voor de gek te houden met slechts een touch commando:
uiteraard is dit niet de meest intelligente updatefunctie die beschikbaar is, maar het biedt basisbescherming tegen het overschrijven van recente gegevens.
Moving
Er zijn meer manieren om gegevens te verplaatsen dan alleen het MV Commando, maar als het standaard programma voor de taak, is mv een goede universele optie., Nu je weet welke opties je beschikbaar hebt, kun je MV slimmer dan ooit tevoren gebruiken.