• 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

K4m1K4tz3

Advanced Hacker
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?
 
OP
K

K4m1K4tz3

Advanced Hacker
Naja ich habe einen Ordner mit mehreren Dateien. Denen fehlt allen die Dateiendung. Diese möchte ich jeder Datei anhängen.
 

Mystefix

Newbie
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.
 

regexer

Advanced Hacker
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.
 

regexer

Advanced Hacker
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...
 
OP
K

K4m1K4tz3

Advanced Hacker
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.
 

abgdf

Guru
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
 
OP
K

K4m1K4tz3

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

Zum Glück letzteres ;-)

Es sind ne Menge Bilder, die aus irgend nem Grund keine Endung haben.
 

regexer

Advanced Hacker
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?
 

abgdf

Guru
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