Terug naar hoofdinhoud

Linux commando: mv

10 juli 2026

Een bestand verplaatsen voelt nog eenvoudiger dan er een kopieren. Je typt mv, de oude naam, de nieuwe naam, en drukt op Enter. Er lijkt niets te gebeuren, en dat is precies de verrassing: op dezelfde schijf verplaatst mv geen enkele byte van je gegevens. Het verandert een naam in een lijst en is meteen klaar, of het bestand nu twee kilobyte of tweehonderd gigabyte is. Datzelfde commando hernoemt ook bestanden, overschrijft stilletjes alles wat in de weg staat, en heeft geen ongedaan-maken. mv goed leren betekent leren wat een bestandsnaam in Linux echt is.

1. De basis

De taak van mv is om een bestand te verplaatsen, wat in de praktijk een van twee dingen betekent: een bestand een nieuwe naam geven op dezelfde plek, of het naar een andere plek verplaatsen. Voor mv zijn dat dezelfde handeling. Wanneer je draft.txt hernoemt naar final.txt, en wanneer je final.txt naar een andere map verplaatst, doe je onder de motorkap precies een ding: veranderen waar een naam naar wijst.

Dat is het denkmodel om vast te houden. De gegevens van een bestand staan op de schijf, en de naam ervan staat in een map als een kleine vermelding die naar die gegevens wijst. Binnen een bestandssysteem bewerkt mv alleen mapvermeldingen; het raakt de gegevens zelf nooit aan. Daarom is een groot bestand op dezelfde schijf verplaatsen onmiddellijk, terwijl datzelfde bestand kopieren met cp echte tijd en echte ruimte kost. Een verplaatsing herschikt namen; een kopie verdubbelt bytes.

Het commando leest van links naar rechts: het laatste argument is de bestemming, en alles daarvoor is een bron.

$ mv draft.txt final.txt

Het commando dat lijkt alsof het niets doet, want op hetzelfde bestandssysteem doet het nauwelijks iets. Achter die twee letters schuilt een van de zuiverste ideeen in Unix: een naam en zijn gegevens zijn losse dingen, en een bestand verplaatsen is gewoon de naam verplaatsen.

Dit artikel begint met de eenvoudigste hernoeming en bouwt op naar het verplaatsen van hele mapbomen zonder recursieve optie, backups maken in plaats van overschrijven, de atomaire hernoeming die mv tot de veilige manier maakt om een bestand bij te werken, en waarom een verplaatsing over twee schijven veel gevaarlijker is dan een op een. Aan het einde weet je niet alleen hoe je een bestand verplaatst, maar precies wanneer mv er een gaat vernietigen.

Het juiste denkmodel: binnen een bestandssysteem verplaatst mv geen gegevens, het verplaatst een naam. De oorspronkelijke gegevens verlaten hun plek op de schijf nooit; alleen het label dat ernaar wijst verandert.

Naar boven

2. Waar komt de naam vandaan?

De naam mv is simpelweg een afkorting van move (verplaatsen). Zoals bij de meeste vroege Unix-commando's zit er geen verborgen betekenis in; de twee letters zijn de eerste en laatste medeklinker van het woord.

mv  =  MoVe

Het vroege Unix werd getypt op trage teletype-terminals die elk teken op papier afdrukten, dus korte commandonamen bespaarden zowel typtijd als papier. Daarom is het commando mv en niet move. Diezelfde reflex gaf ons cp (copy), rm (remove) en ls (list): een hele woordenschat van werkwoorden van twee letters.

Een klein punt van verwarring is dat mv ook bestanden hernoemt, terwijl er voor het alledaagse geval geen apart rename-commando is; hernoemen is gewoon een bestand naar een nieuwe naam in dezelfde map verplaatsen. De handleiding zegt het zelfs in de titel: "move (rename) files". Als je ooit naar Windows overstapt, let dan op dat de shell daar de klus splitst in move en rename; Unix behandelt ze als een.

Naar boven

3. Een korte geschiedenis

Het commando mv is een van de originele Unix-gereedschappen. Het werd geleverd met Unix 1st Edition bij Bell Labs in 1971, naast cp, cat en rm, en is sindsdien aanwezig op elk Unix-achtig systeem: Linux, macOS, de BSD's, Solaris en AIX. Het kernidee, "verander waar een naam naar wijst", is in ruim vijftig jaar niet veranderd.

Wat mv bijzonder maakt, is de systeemaanroep eronder. Op hetzelfde bestandssysteem gebruikt mv rename(), een enkele kernel-operatie die een naam in een ondeelbare stap van de ene plek naar de andere wisselt. Er wordt niets gekopieerd, en er is geen tussentoestand waarin het bestand op beide plekken of op geen van beide bestaat. Wanneer de bron en de bestemming op verschillende bestandssystemen staan, kan rename() niet werken, dus valt mv terug op het trage pad: elke byte naar de nieuwe locatie kopieren en daarna het origineel verwijderen.

PeriodeMijlpaal
1971 mv verschijnt in Unix 1st Edition bij Bell Labs
Jaren 80 BSD en System V verfijnen verplaatsingen over bestandssystemen (kopieren-dan-verwijderen)
Jaren 90 GNU coreutils mv wordt de standaardversie op Linux
2009 GNU mv krijgt -u (update) en een volwaardige --backup-familie
2023 coreutils 9.x voegt --no-copy en een --update=-moduskeuze toe

Er zijn twee families die je in de praktijk tegenkomt. De meeste Linux-systemen draaien de GNU coreutils-versie van mv. macOS en de BSD's leveren de BSD-versie. Ze zijn het eens over de alledaagse opties zoals -i, -f en -v. De verschillen zitten in de extra's: GNU voegt lange opties toe (bijvoorbeeld --backup, --strip-trailing-slashes en --update) die BSD anders spelt of mist. Dit artikel gebruikt de GNU-versie, die je op vrijwel elke Linux-server vindt.

Naar boven

4. Eenvoudige toepassingen

4.1 Een bestand hernoemen

Geef mv een bron en een nieuwe naam, en het hernoemt het bestand. In de voorbeelden hieronder is de regel die met $ begint wat je typt; een commando dat niets afdrukt, is gewoon geslaagd, wat de normale Unix-manier is om "alles goed" te zeggen.

$ mv notes.txt notes-final.txt
$ ls
notes-final.txt

Merk op dat de oude naam weg is. Anders dan cp, dat je met twee bestanden achterlaat, laat mv je met een achter: hetzelfde bestand onder een nieuw label.

4.2 Een bestand naar een map verplaatsen

Als de bestemming een bestaande map is, zet mv het bestand erin en behoudt het de oorspronkelijke bestandsnaam. Dit is de meest voorkomende alledaagse toepassing: iets wegbergen in een map.

$ mv report.txt /home/peter/archive/
$ ls /home/peter/archive/
report.txt

De schuine streep aan het eind van archive/ is een goede gewoonte: het maakt je bedoeling duidelijk en, als je de mapnaam verkeerd typt, faalt mv luidruchtig in plaats van report.txt stilletjes te hernoemen naar een bestand dat archive heet.

4.3 Meerdere bestanden tegelijk verplaatsen

Wanneer je meer dan twee argumenten geeft, behandelt mv het laatste als een bestemmingsmap en verplaatst het elk bestand daarvoor daarin. Hier telt de regel "het laatste argument is de bestemming" echt.

$ mv index.html style.css script.js /var/www/site/

Alle drie de bestanden landen in /var/www/site/. Als dat laatste argument geen bestaande map is, weigert mv en drukt het een fout af, wat een handig vangnet is:

$ mv a.txt b.txt nodir
mv: target 'nodir': No such file or directory

4.4 Een map verplaatsen: geen -r nodig

Hier is het eerste echte verschil met cp. Om een map te kopieren moet je -r toevoegen, want een map kopieren betekent alles erin verdubbelen. Een map verplaatsen heeft zo'n optie niet nodig. Omdat een verplaatsing op hetzelfde bestandssysteem maar een naam verandert, is een map met tienduizend bestanden verplaatsen net zo onmiddellijk als een bestand verplaatsen.

$ mv project /home/peter/projects/
$ ls /home/peter/projects/
project

De hele boom gaat mee, onmiddellijk, want er is binnenin niets echt verplaatst. Alleen de eigen vermelding van de map is veranderd om naar een nieuwe ouder te wijzen. Dat ene feit verklaart het meeste van wat mv bijna magisch snel doet aanvoelen.

Een bestand hernoemen en een bestand verplaatsen zijn dezelfde handeling. Of de bestemming nu een naam of een map is, en of die al bestaat, verandert stilletjes waar je bestand belandt. Sectie 6 komt op die valkuil terug.

Naar boven

5. Gematigde toepassingen

5.1 Niet stilletjes overschrijven: -i en -n

Standaard overschrijft mv een bestaand bestemmingsbestand zonder waarschuwing. Als final.txt al iets belangrijks bevat, veegt een onvoorzichtige verplaatsing het weg en is het bestand dat het verving voorgoed weg. Twee opties maken mv voorzichtiger.

De optie -i (kort voor interactive, interactief) vraagt het voordat het overschrijft, zodat je een fout kunt tegenhouden:

$ mv -i new.txt final.txt
mv: overwrite 'final.txt'? n

De optie -n (kort voor no-clobber, niet-overschrijven) is de stille versie: het slaat de verplaatsing over als de bestemming al bestaat en vraagt nooit, wat handig is in scripts waar je alleen ontbrekende bestanden wilt aanvullen.

$ mv -n new.txt final.txt      # existing final.txt is left untouched

Als je meer dan een van -i, -f en -n meegeeft, telt alleen de laatste op de regel. De optie -f (kort voor force, forceren) is het tegenovergestelde van -i: het overschrijft zonder te vragen, handig om een mv te overrulen die als mv -i is gealiast.

5.2 Zien wat er gebeurt: -v

De optie -v (kort voor verbose, uitgebreid) drukt een regel per verplaatst bestand af. Bij een reeks hernoemingen verandert dit een stille operatie in een zichtbare lijst van wat er echt gebeurde.

$ mv -v draft1.txt draft2.txt final.d/
renamed 'draft1.txt' -> 'final.d/draft1.txt'
renamed 'draft2.txt' -> 'final.d/draft2.txt'

Het woord renamed in de uitvoer is een kleine aanwijzing voor wat mv onder de motorkap echt doet: zelfs een "verplaatsing" naar een andere map is een hernoeming van het pad van het bestand.

5.3 Alleen nieuwere bestanden verplaatsen: -u

De optie -u (kort voor update, bijwerken) verplaatst een bestand alleen als de bron nieuwer is dan de bestemming, of als de bestemming ontbreekt. Het is handig om een map met wijzigingen samen te voegen met een bestaande zonder bestanden te overschrijven die je al hebt bijgewerkt.

$ mv -u *.txt /shared/docs/     # only files newer than those in docs/ are moved

5.4 Backups in plaats van overschrijven: -b

Soms wil je een bestand overschrijven maar de oude versie toch bewaren, voor het geval dat. De optie -b (kort voor backup) hernoemt de bestaande bestemming uit de weg voordat het de nieuwe wegschrijft, en voegt standaard een ~ aan de naam toe.

$ mv -b new.conf app.conf
$ ls
app.conf  app.conf~          # the old app.conf is now app.conf~

Met --backup=numbered krijg je app.conf.~1~, app.conf.~2~, enzovoort, zodat herhaalde verplaatsingen nooit een eerdere versie verliezen. Dit is een lichtgewicht veiligheidsgewoonte bij het met de hand vervangen van configuratiebestanden.

Naar boven

6. Gevorderde toepassingen

6.1 De mapvalkuil: bestemming bestaat wel of niet

Dit is het meest verwarrende aan het verplaatsen van mappen, en het betrapt iedereen minstens een keer. Wanneer de bestemming een mapnaam is, hangt het resultaat af van of die map al bestaat.

$ mv src dst        # dst does NOT exist: src is renamed to dst
$ mv src dst        # dst DOES exist:     src is moved INSIDE dst
                    #                     giving dst/src

Voer hetzelfde commando in twee verschillende situaties uit en je krijgt twee verschillende indelingen. Als dst niet bestaat, wordt src simpelweg dst. Als dst al bestaat als map, wordt src er binnenin verplaatst, wat dst/src oplevert. Wanneer een script een map op mysterieuze wijze een niveau te diep begraaft, is deze regel bijna altijd de oorzaak.

Om mv te dwingen de bestemming als een gewone naam te behandelen en er nooit "in" te verplaatsen, gebruik je -T (kort voor no-target-directory, geen bestemmingsmap):

$ mv -T src dst     # always rename src to dst, never dst/src

Het spiegelbeeld is -t (kort voor target-directory, bestemmingsmap), dat de bestemmingsmap vooraf benoemt zodat elk ander argument een bron is. Dit is onmisbaar bij het bouwen van commando's met find en xargs, waar de map eerst moet komen:

$ find . -name '*.log' -print0 | xargs -0 mv -t /var/log/archive/

6.2 Het detail van de schuine streep: --strip-trailing-slashes

Een schuine streep aan het eind betekent meestal "dit is een map". Tab-aanvulling in de shell voegt er vaak automatisch een toe. Maar een verdwaalde streep op een bronnaam kan veranderen hoe mv zich gedraagt, vooral bij symbolische links naar mappen. De optie --strip-trailing-slashes verwijdert eventuele schuine strepen aan het eind van de bronargumenten, zodat ze als gewone namen worden behandeld.

$ mv --strip-trailing-slashes linkdir/ newname

Je zult dit zelden met de hand nodig hebben, maar het is goed te weten dat het bestaat wanneer een mv in een script zich vreemd gedraagt bij namen waar een aanvulling een streep aan heeft toegevoegd.

6.3 Verplaatsen is hernoemen, dus rechten gaan mee

Omdat een verplaatsing op hetzelfde bestandssysteem nooit een nieuw bestand maakt, houdt het bestand alles: zijn rechten, eigenaar, tijdstempels, uitgebreide attributen en inode-nummer blijven precies zoals ze waren. Er is geen -p-optie op mv zoals bij cp, en die is niet nodig, want er wordt niets opnieuw gemaakt. Zodra mv naar een ander bestandssysteem oversteekt, moet het echter een nieuw bestand op de bestemming maken, en dan doet het zijn best om die attributen op de kopie te reproduceren voordat het het origineel verwijdert.

Daarom overleeft het inode-nummer, dat je met ls -i kunt zien, een hernoeming op dezelfde schijf, maar verandert het na een verplaatsing over schijven heen: in het eerste geval is het hetzelfde bestand, en in het tweede een nieuw.

6.4 Wie een bestand mag verplaatsen

Omdat een verplaatsing mapvermeldingen bewerkt in plaats van het bestand zelf, zit het recht dat telt op de mappen, niet op het bestand. Om een bestand te hernoemen of te verplaatsen heb je schrijf- en uitvoerrecht nodig op de bronmap, en op de bestemmingsmap ook. Je hoeft het bestand niet te bezitten, en je hoeft niet eens toestemming te hebben om de inhoud te lezen of te schrijven. Dit verrast veel nieuwelingen.

$ ls -l
-rw-r--r-- 1 root root 42 Jul  7 10:00 owned-by-root.txt
$ mv owned-by-root.txt renamed.txt    # works: you have write access to the directory

De ene uitzondering is een map met de sticky bit ingesteld, zoals /tmp. Daar mag alleen de eigenaar van een bestand (of root) het hernoemen of verwijderen, en dat is precies wat gebruikers op een gedeeld systeem tegenhoudt om elkaars bestanden uit /tmp te verplaatsen.

Wanneer de bron een symbolische link is, verplaatst mv de link zelf, niet het bestand waar die naar wijst. Het doelbestand blijft precies waar het is, en de link krijgt gewoon een nieuwe naam of locatie terwijl hij nog steeds naar hetzelfde pad wijst.

$ mv mylink newlink    # the link is renamed; its target is untouched

Merk op dat een symlink zijn doel als pad opslaat, niet als inode. Als dat pad relatief was, kan het verplaatsen van de link naar een andere map hem naar niets laten wijzen, want het relatieve pad wordt nu vanaf een andere plek opgelost.

Naar boven

7. Iets wat de meeste gebruikers niet weten

7.1 Een hernoeming is atomair, en dat maakt het een veiligheidsgereedschap

Hier is het echt nuttige geheim. Op hetzelfde bestandssysteem is rename() atomair: vanuit het oogpunt van elk ander programma schakelt de bestemmingsnaam in een enkel moment van het oude bestand naar het nieuwe, zonder tussenmoment waarin het ontbreekt, half geschreven of leeg is. Als de stroom uitvalt tijdens de operatie, hou je ofwel het oude bestand ofwel het nieuwe over, nooit een kapotte mengeling.

Dit is de standaardtruc om een belangrijk bestand veilig bij te werken. In plaats van rechtstreeks over config.yaml te schrijven, waar een crash halverwege het afgekapt zou achterlaten, schrijf je naar een tijdelijk bestand in dezelfde map en hernoem je dat vervolgens op zijn plaats:

$ vim config.yaml.new          # write the new version to a temp file
$ mv config.yaml.new config.yaml   # atomic swap: readers see old OR new, never half

Elke lezer van config.yaml ziet ofwel het volledige oude bestand ofwel het volledige nieuwe. Talloze programma's, van teksteditors tot databases, bewaren je werk precies zo. Het werkt alleen wanneer het tijdelijke bestand op hetzelfde bestandssysteem staat als het doel, want alleen dan is de hernoeming atomair.

Een atomaire hernoeming is waarom "schrijf een tijdelijk bestand, en mv het dan over het echte" de veilige manier is om elk bestand bij te werken dat andere programma's tegelijkertijd zouden kunnen lezen.

7.2 Een verplaatsing over schijven is een kopie plus een verwijdering

Mensen behandelen elke mv als onmiddellijk en veilig, maar dat is alleen waar binnen een bestandssysteem. Zodra de bron en de bestemming op verschillende schijven, partities of aankoppelpunten staan, kan mv niets hernoemen. Het valt terug op elke byte lezen, die naar de nieuwe locatie schrijven, en daarna het origineel verwijderen, wat precies is wat cp doet plus een rm.

Dit verandert het risico volledig. Een verplaatsing van een groot bestand over schijven kost echte tijd en is, cruciaal, niet atomair. Als het halverwege wordt onderbroken, is de kopie op de bestemming onvolledig terwijl het origineel misschien al deels is verwerkt. Daarom kan een onderbroken mv tussen twee schijven gevaarlijker zijn dan een onderbroken cp, en waarom veel beheerders bij grote overdrachten tussen machines of aankoppelpunten eerst kopieren, verifieren, en pas dan de bron met de hand verwijderen.

Als je niet zeker weet of een verplaatsing een onmiddellijke hernoeming of een trage kopie wordt, kun je van tevoren controleren waar elk pad staat. df -T toont het bestandssysteem en zijn type voor een gegeven pad, en stat -c %m drukt het aankoppelpunt af waar een bestand bij hoort. Wanneer twee paden hetzelfde aankoppelpunt melden, is een verplaatsing ertussen een hernoeming; wanneer ze verschillen, is het een kopie plus een verwijdering.

$ df -T report.txt /mnt/backup/
Filesystem     Type  ...  Mounted on
/dev/sda1      ext4  ...  /
/dev/sdb1      ext4  ...  /mnt/backup    # different mount = copy + delete

7.3 Er is geen ongedaan-maken, en geen prullenbak

Het beroemde gevaar van mv zit bij de bestemming: mv a b vernietigt wat b ook was, zonder bevestiging en zonder prullenbak. Er is geen ongedaan-maken. Het oorspronkelijke bestand waar b naar wees is simpelweg vergeten, en de gegevens ervan worden mettertijd door het systeem hergebruikt.

Er is ook een subtielere valkuil. Een bestand over zichzelf heen verplaatsen wordt opgemerkt en geweigerd:

$ mv a a
mv: 'a' and 'a' are the same file

Toch kan de shell gevaar voor mv verbergen. Een jokerteken als mv * archive/ in een map die ook een bestand bevat dat archive heet (geen map), probeert alles over die ene naam te verplaatsen en overschrijft bestand na bestand. Wanneer je met jokertekens verplaatst, kijk dan eerst goed naar waar de * daadwerkelijk in uiteenvalt.

Een verwante valkuil komt van bestandsnamen die met een streepje beginnen. Een bestand dat -file.txt heet, ziet er voor mv precies uit als een optie, dus het commando leest het als een vlag en faalt met een verwarrende fout. De oplossing is de markering --, die mv vertelt dat alles erna een bestandsnaam is, geen optie:

$ mv -- -file.txt archive/    # everything after -- is treated as a name
$ mv ./-file.txt archive/     # or hide the dash behind a ./ path

7.4 Weten waar mv ophoudt

Een deel van vakmanschap is weten wanneer een ander gereedschap beter past. mv is perfect voor een eenmalige hernoeming of een lokale verplaatsing. Daarbuiten nemen anderen het over.

BehoefteGebruikWaarom
Veel bestanden hernoemen op patroon rename / mmv Past een regel toe op honderden namen tegelijk, wat mv niet kan
Naar een andere machine verplaatsen rsync / scp Kopieert over het netwerk met SSH; voeg --remove-source-files toe om een verplaatsing na te bootsen
Enorme bomen veilig tussen schijven verplaatsen rsync Kan hervatten na een onderbreking en verifieren voordat je de bron verwijdert
Het origineel op zijn plaats houden cp Verdubbelt de gegevens in plaats van de naam te verplaatsen

Een veelvoorkomende verrassing is dat mv niet in bulk kan hernoemen. mv *.txt *.md doet niet wat je zou hopen; de shell vult de jokertekens in voordat mv ooit draait, en mv ziet gewoon een lange lijst .txt-bestanden met een verwarrend laatste argument. Voor patroonhernoemingen grijp je naar het rename-gereedschap. Leer mv toch eerst: het staat op elke machine waar je ooit op inlogt, ook in een reddingsshell, en het verschil begrijpen tussen hernoemen en kopieren is de basis waarop de andere gereedschappen voortbouwen.

Naar boven

8. Beste werkwijzen

  • Ga ervan uit dat de bestemming wordt overschreven. Vraag je voor mv a b af wat b nu bevat. Er is geen ongedaan-maken. Gebruik -i als je met de hand werkt en niet zeker bent.
  • Gebruik "tijdelijk bestand, dan mv" om belangrijke bestanden bij te werken. Schrijf de nieuwe versie naast het origineel en hernoem die op zijn plaats; de atomaire wissel betekent dat lezers nooit een half geschreven bestand zien.
  • Let op de mapvalkuil. Bij mv src dst verschilt het resultaat naargelang dst bestaat. Gebruik -T wanneer je "hernoem naar precies deze naam" bedoelt.
  • Zet een schuine streep achter een bestemmingsmap. mv file dir/ faalt luidruchtig als dir ontbreekt, in plaats van file stilletjes naar dir te hernoemen.
  • Kopieer, verifieer, en verwijder dan bij verplaatsingen over schijven. Een verplaatsing tussen bestandssystemen is een niet-atomaire kopie plus verwijdering; verkies bij grote of belangrijke gegevens rsync en verwijder de bron pas als je het resultaat hebt gecontroleerd.
  • Grijp zonder aarzelen naar de handleiding. De gewoonte die beginners van professionals onderscheidt, is man mv typen zodra er een vraag opkomt.
$ man mv                            # the full manual page
$ mv --help                         # a quick flag summary (GNU)
$ info coreutils 'mv invocation'    # the verbose GNU manual
Naar boven

9. Veelgemaakte fouten

9.1 Drie veelvoorkomende mythes

MytheWerkelijkheid
"mv verplaatst altijd de gegevens." Op hetzelfde bestandssysteem verplaatst het alleen de naam; de gegevens verlaten hun plek nooit. Het kopieert gegevens alleen over bestandssystemen heen.
"mv vraagt voordat het overschrijft." Dat doet het niet. Standaard overschrijft het stilletjes. Voeg -i of -n toe voor veiligheid.
"mv *.txt *.bak hernoemt elk bestand." De shell vult de jokertekens eerst in, dus dit faalt. Gebruik het rename-gereedschap voor patroonhernoemingen.

9.2 Andere valkuilen om te vermijden

  • Overschrijven zonder het te merken. mv new important vernietigt important zonder waarschuwing. Er is geen prullenbak en geen ongedaan-maken.
  • De verrassing van het mapnesten. src naar een bestaande dst verplaatsen geeft dst/src, niet een hernoemde dst. Gebruik -T om een gewone hernoeming af te dwingen.
  • Erop vertrouwen dat een verplaatsing over schijven onmiddellijk en veilig is. Tussen bestandssystemen kopieert mv en verwijdert het daarna; een onderbreking kan je met een onvolledig bestand op de bestemming achterlaten.
  • Metadataproblemen verwachten bij een lokale verplaatsing. Die zijn er niet; rechten, eigenaar en tijdstempels overleven allemaal een hernoeming op dezelfde schijf, want het is hetzelfde bestand.
  • Over een netwerk-aankoppelpunt verplaatsen en een hernoeming aannemen. Een NFS- of ander extern aankoppelpunt is een ander bestandssysteem, dus het is een volledige kopie-en-verwijdering, geen snelle naamswijziging.
  • Bestandsnamen die met een streepje beginnen. mv -file.txt dir/ wordt als opties gelezen en faalt. Zet -- voor de namen, of gebruik een pad zoals ./-file.txt.
Naar boven

10. Samenvatting

Het commando mv lijkt alsof het niets doet, en op dezelfde schijf is dat bijna waar, wat het juist zo'n zuivere les maakt in hoe Linux een bestand van zijn naam scheidt.

  • mv is kort voor "move" (verplaatsen). Het hernoemt een bestand of verplaatst het naar een andere plek; beide zijn dezelfde handeling, namelijk veranderen waar een naam naar wijst.
  • Op een bestandssysteem verplaatst het alleen de naam, met een atomaire rename(), dus een groot bestand of een hele map verplaatsen is onmiddellijk en heeft geen -r nodig.
  • Over bestandssystemen heen kan het niet hernoemen, dus kopieert het elke byte en verwijdert het het origineel, wat tijd kost en niet atomair is.
  • Het laatste argument is de bestemming. Naar een bestaande map verplaatsen behoudt de bestandsnaam; meerdere bestanden verplaatsen vereist dat het laatste argument een map is.
  • Of de bestemmingsmap al bestaat verandert waar het bestand belandt; gebruik -T om een gewone hernoeming af te dwingen en -t om de bestemmingsmap eerst te benoemen.
  • -i vraagt voor het overschrijven, -n slaat bestaande bestanden over, -f forceert, -v toont voortgang, -b bewaart een backup, -u verplaatst alleen nieuwere bestanden.
  • Omdat een hernoeming atomair is, is "schrijf een tijdelijk bestand, en mv het dan over het doel" de veilige manier om een bestand bij te werken dat andere programma's lezen.
  • Het recht om een bestand te verplaatsen zit op de mappen, niet op het bestand: met schrijfrecht op een map kun je een bestand verplaatsen dat je niet bezit, tenzij de sticky bit (zoals op /tmp) het verbiedt.
  • Er is geen ongedaan-maken en geen prullenbak; mv a b vernietigt wat b ook was, stilletjes.
  • Weet waar mv ophoudt: rename voor patroonhernoemingen, rsync voor veilige verplaatsingen over schijven of op afstand, cp om het origineel te houden.
  • Bij twijfel, typ man mv.

Dit is de snelle referentie om te bewaren:

mv a b               rename a to b (overwrites b silently)
mv a b c dir/        move several files into a directory
mv dir dst/          move a whole directory (no -r needed)
mv -T src dst        rename src to dst, never dst/src
mv -t dir/ a b c     name the target directory first
mv -i a b            ask before overwriting b
mv -n a b            skip if b already exists
mv -b a b            back up the old b as b~ before overwriting
mv -u a b            move only if a is newer than b
mv -- -x.txt dir/    move a file whose name starts with a dash
mv tmp real          the atomic-swap trick for safe file updates

Kleine commando's als mv verbergen een verrassende hoeveelheid van hoe Linux is gebouwd, en een enkele onvoorzichtige verplaatsing kan uren werk ongedaan maken zonder weg terug. Als je servers ertoe doen en je ze wilt laten onderhouden door iemand die begrijpt wat er onder de motorkap echt gebeurt, dan is dat precies het soort werk waar ik graag mee help.

Naar boven
Linux commando: mv
Peter Martin
Peter Martin
Joomla Specialist

Peter is Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.