1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
797
797
EMPFEHLEN
-
Hi,
als erstes mal ein großes Lob an diese Community. bin hier schon Länger als Leser unterwegs und habe jetzt leider ein kleines Problem.
Ich hoffe ihr könnt mir helfen:
ich möchte ein Shell-Skript schreiben, das erkennt von welchem Typ eine Datei (Dateiname über Eingabeaufforderung in der Konsole) ist und eine textdatei ausgibt, bzw. eine Zip-Datei entpackt. mein Problem ist einfach, dass ich den If-Fall nicht hinbekomme.
Danke im Voraus,
gruß
Christian
-
Hilft dir das vllt.?
Code :1
if [ -z "${FILE_PATH##*.gpg}" -a $FILE_PATH != ".gpg" ]; then...
-
27.10.10 08:40 #3
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Für Fallunterscheidungen eignet sich meist ein case besser:
GrußCode bash:1 2 3 4 5 6 7 8 9 10 11
case "$FILENAME" in *.txt ) echo Textdatei ;; *.zip | *.jar ) echo Zip-Datei ;; * ) echo unbekannte Datei ;; esac
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
27.10.10 08:48 #4
- Registriert seit
- Jun 2007
- Ort
- Passau (Niederbayern)
- Beiträge
- 1.394
Hallo chrian und Herzlich Willkommen als Mitglied hier bei tutorials.de

Den Typ einer Datei erfährst du im Linux Bereich mit Hilfe des Programms "file".
Hier mal ein Beispiel, wie du das verwenden kannst:
Code :1 2 3 4 5
$> file /root/textdatei /root/textdatei: UTF-8 Unicode text $> file info.png info.png: PNG image, 128 x 128, 8-bit/color RGBA, non-interlaced
Das Programm geht nicht nur über die Dateiendung, sondern auch über die sogenannten "File Signature Bytes".
Benutzereingaben liest du ja in einem Shellscript über "read" ein, hier ein kleines Beispiel:
Code :1 2 3 4
$> read test servus $> echo $test servus
Um nun herauszufinden, welchen Dateityp die Eingabe hat, kannst du die Eingabe an das Programm "file" geben und danach abfragen, was da drin steht. Da das "file" verschiedene Details bei gleichen Dateitypen ausgeben kann, würde ich dir empfehlen das Ganze zum Beispiel mit "grep" etwas zu generalisieren.
Code bash:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#/bin/bash echo -n "Dateiname: " read eingabe if [ ! -e "$eingabe" ]; then echo "Datei existiert nicht!" >&2 exit 1 fi typ=$( file "$eingabe" ) if [ ! -z "$( echo "$typ" | grep -i "text" )" ]; then echo "Es ist eine Textdatei." fi if [ ! -z "$( echo "$typ" | grep -i "png" )" ]; then echo "Es ist ein Bild (PNG)." fi exit 0
Das für dich noch interessant "zip" liefert bei mir folgende Ausgabe:
Code :1 2
$> file build.zip build.zip: Zip archive data, at least v2.0 to extract
Baue diesen Fall in mein obiges Beispiel ein, dann sollte es funktionieren.
Gruß
BKÜber eine gute Bewertung freut sich jeder ;)
Bitte erledigte Threads als "Erledigt" markieren.
"Though a program be but three lines long, someday it will have to be maintained.''
-- Geoffrey James, "The Tao of Programming"
-
27.10.10 09:02 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Wenn du nicht über die Dateiendung, sondern direkt über den Dateityp gehen willst, dann ist es meist besser (bzw. einfacher) den MIME-Type zu verwenden:
GrußCode bash:1 2 3 4 5 6 7 8 9 10 11
case $(file -bi "$FILENAME") text/*) echo TextDatei ;; image/png) echo PNG Datei ;; image/*) echo PNG, BMP, JPEG, GIF etc. ;; esac
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.





Zitieren

Login





