Kopieren für Schreibfaule

  Ralf Hersel   Lesezeit: 3 Minuten  🗪 4 Kommentare

Kopieren oder Umbenennen von Dateien im Terminal geht auch einfacher.

kopieren für schreibfaule

Da habt ihr mal wieder eine Flatpak-Datei mit einem ellenlangen Dateinamen heruntergeladen und möchtet diesen umbenennen oder die Datei kopieren. Wer das im Terminal macht, tippt den Dateinamen zweimal ein. Doch auch ohne Zusatzwerkzeuge bieten die Bordmittel Möglichkeiten, um die Arbeit zu erleichtern.

Angenommen, ihr habt in irgendeinem Verzeichnis die Datei dateiname1.txt liegen. Nun möchtet ihr diese Datei umbenennen oder kopieren. Normalerweise macht man das so:

  • Umbenennen: mv dateiname1.txt dateiname2.txt
  • Kopieren: cp dateiname1.txt dateiname2.txt

In der Regel tippt man dabei den Dateinamen (zumindest teilweise) doppelt ein. Dabei geht das viel einfacher, wie ihr gleich lesen werdet.

Da der vorgestellte Tipp sowohl für mv, als auch für cp (und viele andere Befehle) funktioniert, nenne ich hier nur jeweils ein Beispiel. In der vereinfachten Variante für Schreibfaule sieht das oben gezeigte Beispiel so aus:

[ralf@ralf delme]$ ls
dateiname1.txt
[ralf@ralf delme]$ mv dateiname{1,2}.txt
[ralf@ralf delme]$ ls
dateiname2.txt

Die geschweifte Klammer wirkt wie ein Replace im Text des Dateinamens, wobei 1 durch 2 ersetzt wird. Das funktioniert mit beliebigen Positionen und Längen, wie man im nächsten Beispiel sieht:

dateiname1.txt
[ralf@ralf delme]$ mv {datei,file}name1.txt
[ralf@ralf delme]$ ls
filename1.txt

Auch leere Strings können verwendet werden. Hier wird die 1 in der umbenannten Datei durch Nichts ersetzt:

filename1.txt
[ralf@ralf delme]$ mv filename{1,}.txt
[ralf@ralf delme]$ ls
filename.txt

Wie bekannt ist, kommt der Dateiendung unter Linux keine besondere Bedeutung zu. Deshalb kann auch dieser Namensbestandteil ersetzt werden:

filename.txt
[ralf@ralf delme]$ mv filename.{txt,md}
[ralf@ralf delme]$ ls
filename.md

Beim Umbenennen von Dateien mag es ja angehen, dass man im selben Verzeichnis bleibt. Wer eine Datei kopiert, möchte die Kopie in der Regel in einem anderen Verzeichnis sehen. Dazu wendet ihr dasselbe Verfahren auf den Dateipfad an:

[ralf@ralf delme]$ ls
filename.md
[ralf@ralf delme]$ cp {,~/dev/}filename.md
[ralf@ralf delme]$ ls ~/dev/file*
/home/ralf/dev/filename.md

Was passiert hier? Mit {,~/dev/} wird das Quellverzeichnis (in dem ihr euch befindet) durch das Verzeichnis ~/dev/ ersetzt. Die ganze Magie nennt sich Brace Expansion, was wiederum ein Unterkapitel der Shell Expansion ist. Bevor jetzt die Bash-Gurus aufheulen, weil ich das Thema Expansion hier nur in Bruchstücken aufgegriffen habe; mir ging es nur um den Anwendungsfall, in dem beim Kopieren und Umbenennen diese Technik einfach und verständlich eingesetzt werden kann.

Tags

kopieren, Umbenennen, Terminal, Expansion, bash

Arjun
Geschrieben von Arjun am 18. April 2023 um 22:41

Danke, das kannte ich noch nicht!

Herbert
Geschrieben von Herbert am 18. April 2023 um 23:36

Und was bringt das ? Ist auch nicht weniger zu tippen

Hartmut
Geschrieben von Hartmut am 19. April 2023 um 20:40

Aber mehr 1337.

Ich mache einfach die beiden Dateinamen mit TAB und ändere beim zweiten das entsprechende Zeichen. Ich weiß, ist langweilig.

Florian
Geschrieben von Florian am 26. April 2023 um 08:29

Vielen Dank. Das kannte ich auch noch nicht. Und wieder öffnet sich für mich eine Tür (Brace Expansion) in der Linux Welt, die für mich sehr spannend aussieht :)