[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;