Linux-Terminal-Basics 6: Dateien kopieren/verschieben

Wie bekommt man Dateien von A nach B? Diese Folge wird eine kurze Nummer ;)

Zu den ersten und häufigsten Aufgaben gehört das Kopieren oder Verschieben von Dateien. Und so intuitiv es auf dem Desktop auch sein mag: Im Terminal geht das eigentlich viel schöner. Aber zugegeben, nicht ganz so intuitiv …

In unserer Serie zu Linux-Terminal-Basics zeigen wir Euch, wie Ihr einige der wichtigsten Aufgaben auf der Kommandozeile erledigen könnt – vom Navigieren, über Dateioperationen, bis hin zu komplexen Suchaufträgen. Als Terminal verwenden wir Bash und auch wenn Linux im Vordergrund steht, funktioniert fast alles auch unter Windows. Und nun noch die Links zur Einleitung und zur Übersicht aller Artikel.

Einfaches Kopieren/Verschieben

Um einfach eine einzelne Datei von A nach B zu verschieben oder zu kopieren, benötigt Ihr die Befehle cp (copy) und mv (move) – und in der einfachsten Form gefolgt von Quelle und Ziel:

cp /home/peter/datei_1.txt /home/jochen/
cp /home/peter/datei_1.txt /home/jochen/datei_1_kopie.txt
mv datei_1.txt /media/mein-netzlaufwerk/texte/
mv datei_1.txt datei_1_backup.txt

Vielleich bemerkt Ihr beim Code schon, dass man wahlweise nur einen Ort als Ziel angeben kann oder auch gleich einen neuen Namen für die Datei. Das letzte Beispiel verschiebt die Datei auch gar nicht im klassischen Sinn, sondern benennt sie um (schließlich ändert sich der Pfad nicht).

Und noch eine kleine Ungewohntheit: Unter Linux wird alles als Datei verstanden, auch Ordner. Allerdings müsst Ihr beim Verschieben/Kopieren von Ordnern etwas präziser vorgehen. Hier erst mal ein Beispiel:

mv -r /home/peter/ordner_1 /media/mein-netzlaufwerk/backups

Wichtig ist hier das -r für recursive, da der Ordner ja rekursiv, also samt aller Unterordner und Dateien verschoben werden soll. Beim Kopieren verhält es sich analog. Generell funktionieren mv und cp weitgehend gleich, daher folgend immer nur eine Variante als Beispiel.

Bisweilen wollt Ihr natürlich mehrere Dateien kopieren oder verschieben. In diesem Fallt drehen sich die Angaben von Ziel und Quellen um – logisch, denn man kann natürlich nur ein Ziel angeben, folglich muss dieses vor den beliebig vielen Quellen stehen. Ein Beispiel zeigt es besser:

cp -t /media/mein-netzlaufwerk/backups datei_1.txt foobar.mp3 wasauchimmer.mkv

Über -t (target) wird das Zielverzeichnis also einfach vorangestellt.

Eine letzte wichtige Option ist -f (force) zum Überschreiben von Dateien, etwa:

cp -f meine-datei.txt /backups/

Sollte die Datei im Zielverzeichnis existieren, wird sie überschrieben. Man kann das auch im Sinne eines Updates erledigen:

cp -u meine-datei.txt /backups/

würde die Datei nur dann gegebenenfalls überschreiben, wenn die Datei im Zielverzeichnis älter ist als die Quelldatei.

Bonus: Kommandozeile ausnutzen!

Soweit ließen sich die Aufgaben auch auf dem Desktop erledigen. Aber wie wäre es zum Beispiel damit, ausschließlich MP3- und MP4-Dateien zu kopieren?

cp -t /ziel/ *.mp3 *.mp4

Das wäre auf dem Desktop schon umständlicher. Aber vielleicht wollt Ihr ja nicht alle MP3-Dateien kopieren, sondern zum Beispiel nur die Hörbuchdateien meinhörbuch_020.mp3 bis meinhörbuch_080.mp3. Diesen Bereich von 020 bis 080 kann die Bash selbst durchzählen:

cp meinhörbuch_0{20..80}.mp3 /ziel/

Nun, vielleicht heißen einige der Dateien versehentlich …hoerbuch… mit oe statt ö:

cp meinh+(ö|oe)rbuch_0{20..80}.mp3 /ziel/

+(ö|oe) heißt hier schlicht: ö ODER oe. Es würden also beide Varianten gefunden und kopiert. Ihr seht schon, die Möglichkeiten sind – mal wieder – viel umfangreicher als beim ollen Copy&Paste auf dem Desktop. Die Funktion dahinter nennt sich Shell Globbing: Super mächtig, aber auch nicht ganz trivial; letztlich sind es erweiterte Platzhalter (nicht zu verwechseln mit regulären Ausdrücken!). Und eigentlich ist das nur die Spitze des Eisbergs. Aber da es hier ja nur um Basics geht, Folgendes nur als Ausblick:

cat meine-dateiliste.txt | xargs cp -t ~/backup/
find ./ -maxdepth 2 -name *.png -exec cp {} ~/backup/ \;

Und mit Schleifen fange ich gar nicht erst an … Xargs ist ein schönes Spielzeug, kurz gesagt: Es leitet die Ergebnisse des vorigen Befehls als Argumente an den folgenden Befehl weiter – hier etwa Dateipfade aus einer Textdatei, zum Beispiel für Backups. Mehr zu find und dessen Syntax folgt in der übernächsten Basics-Folge (wird dann hier verlinkt).

Mehr zum Thema Terminal/CLI/Kommandozeile.

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help und VoltAmpereWatt.de. Neu: Mastodon

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"