• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Dateiendungen hinzufügen

Ich bin auf der Suche nach einem Script oder Programm, mit dem ich einfach und schnell Dateiendungen von mehreren Dateien hinzufügen kann.

Kennt jemand so ein Programm, doer hat einen Script parrat?
 
Naja ich habe einen Ordner mit mehreren Dateien. Denen fehlt allen die Dateiendung. Diese möchte ich jeder Datei anhängen.
 
Hier mal eine kleine for Schleife:

for i in `ls -1 Ordner`; do mv $i $i.dateiendung; done

ls -1 gibt dir nur die Dateien in dem Verzeichnis aus und das mv benennt dann die Datei in Datei+Dateiendung um.
 
Mystefix schrieb:
for i in `ls -1 Ordner`; do mv $i $i.dateiendung; done

ls -1 gibt dir nur die Dateien in dem Verzeichnis aus und das mv benennt dann die Datei in Datei+Dateiendung um.
Grundsätzlich richtiger Ansatz. Allerdings sollte man folgendes bedenken:
1. "$i" und "$i.Dateiendung" bitte in doppelte Hochkommas setzen. Das ist wichtig, falls im Dateinamen ein space vorkommt.
2. Das obige Kommado ls listet natürlich auch Unterordner auf. Falls man diese nicht umbenennen will, sollte man besser mit find Ordner -type f arbeiten.

Im Übrigen ist der ls aus meiner Sicht überflüssig. Ein simples Order/* tut es auch. Hierzu wäre dann aber auch Punkt 2 zu beachten.
 
for i in `ls -1 ...` macht allein schon Probleme mit Leerzeichen sofern man nicht mit IFS hantiert, also lassen wir das gleich, und verwenden einfach Wildcards.
 
jengelh schrieb:
for i in `ls -1 ...` macht allein schon Probleme mit Leerzeichen sofern man nicht mit IFS hantiert, also lassen wir das gleich, und verwenden einfach Wildcards.
Ich glaube, diese Diskussion hatten wir hier im Forum schon mehrfach. Der einzige Grund, warum manche an dieser Stelle ls nehmen, ist die Tatsache, dass die for-Schleife nicht durchlaufen wird, falls der ls keine Treffer findet. Bei einer Wildcard-Lösung würde die Schleife trotzdem durchlaufen.
Aber auch das könnte man elegant mit einem find lösen...
 
abgdf schrieb:
Linux identifiziert Dateien eigentlich gar nicht anhand von Dateiendungen. Das ist eher DOS-Style.

Das ist mir schon klar, aber die Dateien die ich umbenennen will sollen auch von Windows genutzt werden ;-)

jengelh schrieb:
for i in `ls -1 ...` macht allein schon Probleme mit Leerzeichen sofern man nicht mit IFS hantiert, also lassen wir das gleich, und verwenden einfach Wildcards.

Genau dieses Problem hatte ich auch, als ich mich selber an ein Script gewagt hatte. Danke für alle Tipps, ich werde dann mal weiter basteln.
 
Also ein bestehendes Programm dafür kenne ich nicht.
Man muß also wohl ein Skript schreiben, das jeweils auf die Ausgaben von "file" reagiert.

Sind das viele verschiedene Arten von Dateien (schwieriger) oder z.B. nur "jpg" und "mp3" (einfacher) ?

Viele Grüße
 
K4m1K4tz3 schrieb:
Es sind ne Menge Bilder, die aus irgend nem Grund keine Endung haben.
Wobei hier der Vorschlag mit dem Befehl "file" auch nicht schlecht ist. So könnte man gif, jpg, tiff usw. unterscheiden. Oder sind das alles jpg?
 
Das ist doch nicht schwer: Für jpg:
Code:
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-

import os

DIR = os.getcwd()

filenames = os.listdir(DIR)

for i in filenames:

    CH = os.popen("file " + i)
    ftype = CH.read().rstrip("\n")

    if "JPEG" in ftype and not i.endswith(".jpg"):
        os.rename(DIR + "/" + i, DIR + "/" + i + ".jpg") 
        print "Renamed:\t" + i + "\t" + i + ".jpg"
Für png, gif usw. einfach die letzten 3 Zeilen anpassen.

Viele Grüße
 
Oben