SUCKUP.de

mv – Linux

This blog post has been published on 2010-01-31 and may be out of date.

[mv = move] mit dem “mv”-Befehl kann man Dateien von einem Ort an einen andern verschieben bzw. wenn dies im selber Verzeichnis ausgeführt wird, eine Datei umbenennen.

eine Datei umbenennen:

ohne Wildcards:

mv data1 dateu_neu1

benennt die Datei “data1” in “dateu_neu1” um

mit Wildcards:

mv *tei1 datei_neu1

-> * = beliebig viele verschiedene Zeichen

mit Wildcards:

mv ?atei1 datei_neu1

-> ? = ein unbestimmter Buchstabe

Dateien verschieben:

mv *.txt old/

alle Dateien welche auf “.txt” enden werden in das Unterverzeichnis old/ verschoben

mehrere Dateien umbenennen:

!!!
mv *.htm *.html
!!!

dieser Befehl funktioniert nicht, da die Bash “*.html” als Verzeichnis interpretiert

Dieses Problem kann man z.B. wie folgt lösen:

for i in *.htm; do mv $i `basename $i .htm`.html; done

mit diesem Befehl, kann man nun alle Dateien welche auf “.htm” enden, mit der neuen Endung “.html” versehen

der ursprüngliche Dateiname welcher in der Variablen $i abgelegt wird, wird jeweils zu dem neuen Dateinamen, welcher sich aus dem “Basisnamen” (basename *1) ohne die Endung und einer neuen Endung “.html” besteht, zusammengefasst und die entsprechende Datei mittels einer “for”-Schleife verschoben

(*1) basename test.txt .txt -> test)

 

for i in *.sh; do mv $i /home/path/; done

verschiebt alle Dateien mit der Endung “.sh” nach /home/path

 

for i in [a-z]*; do mv $i ${i#[a-z]}; done

entfernt das erstes Zeichen von allen Dateien im aktuellen Verzeichnis.

 

for i in [a-z]*; do mv $i z${i}; done

setzt ein “z” vor jeden Dateinamen.

 

Alternativ kann man dieses Problem auch mit dem folgendem Befehl umgehen…

aptitude install mmv

installiere als erstes das Programm “mmv”

mmv -v "*.htm" "#1.html"

wie im vorherigem Beispiel werden auch hier alle Dateien welche auf “.htm” enden umbenannt und enden hinterher auf “.html”

(mit dem Parameter “-c” werden die Dateien nicht verschoben, sondern kopiert)

 

Hier noch ein Beispiel: Welches alle Bilder im aktuellen Verzeichnis um 2 erhört -> “1.jpg” wird zu “3.jpg” …

for i in `ls -r *.jpg`; do
j=$((${i%.*}+2));
echo "$i -> ${j}.${i##*.}";
done;