Dateiname vergleichen

F

fdai160X

Jungspund
Hallo Leute,

ich suche eine Lösung für ein Shell Skript.

Ein Dateiname soll eingelesen werden.
Dann soll überprüft werden, ob dieser die Endung .c hat.

Hat da jemand eine Lösung ?

Mit "test" und "find" habe ich irgendwie so keine Lösung.

Danke
 
Zuletzt bearbeitet:
So was lässt sich mit RegEx also Reguläre Ausdrücke und einer Schleife realisieren. Da ich aber nicht so recht verstehe was du eigendlich damit machen willst kann ich dir kein Beispiel angeben.

btw. verkehrtes Forum - gehört nach Shell-Scripte
 
Ja, Sorry habe ich leider zu spät bemerkt und verschieben kann ich scheinbar auch nicht.

Wie gesagt:

Ein Dateiname soll eingegeben und in einer Variable gespeichert werden.

Nun soll überprüft werden, ob dieser Dateiname die Endung .c hat.

Beipiel:
User gibt helloworld.c ein
Shell gibt aus: Es handelt sich um eine C-Quelltextdatei

User gibt ein: ichbineineDatei
Shell gibt aus: Es handelt sich nicht um eine C-Quelltextdatei. Hänge .c an Ende an.
 
Zuletzt bearbeitet:
Hallo
Das Thema ist wirklich hier falsch.

Die Boradsuche hätte dir dabei z.B. das hier gezeigt.
Um z.B. alle Dateien mit der Endung *text anzuzeigen genügt es die Wildcards der Shell zu benutzen.

find /pfad -iname "*text"

Übertrag es einfach auf dein Problem, und schau mal in die doku zu bash (oder was du verwendest) rein.

HTH
Gruß Wolfgang

Nachtrag: Regex geht auch, ist aber für so ein simples Problem overkill
Für sed wär es /*c$/
 
Zuletzt bearbeitet:
Ja, das habe ich endlich mal ausprobiert. Ich komme da aber nicht zu einem Ergebnis.

Ich habe hier mal den Quelltext

#!/bin/sh
quelltext=""
echo "Geben Sie den Dateinamen ein: "
read quelltext
find -name "$quelltext"[.][c]
echo "$?"

Vielleicht sieht jemand einen Semantik oder Syntax Fehler in der FIND Operation ?
 
Hallo
Versuch es mal so:
...
find /startpfad -name "${quelltext}\.c"
...


Was willst du mit echo $? erreichen?
Das gibt dir nur einen Wert aus, wenn find mit einem Fehler endet.
Solang du 2 nicht umleitest, wird dir der Fehler dann ohnehin ausgegeben.

Gruß Wolfgang
PS Schau dir auch mal -printf für find an.
 
Zuletzt bearbeitet:
Oben aufgeführter Befehl geht leider nicht.

#!/bin/sh
quelltext=""
echo "Geben Sie den Dateinamen ein: "
read quelltext

find . -maxdepth 1 -type f -name "$quelltext" -printf '%f\n'

Ich habe jetzt oben den Befehl gefunden, der mir zumindest wieder die eingelesene Variable richtig sucht. Aber nun: Wie kann ich jetzt noch prüfen, ob die Dateiendung von $quelltext ".c" ist. Ich habe das mit regulären Ausdrücken versucht, aber wenn man eine Datei "hello.c" einliest und dann danach sucht, muss noch das .c angehängt werden. So entsteht hello.c.c, die ja nicht gefunden wird:
find . -maxdepth 1 -type f -name "{$quelltext}\*\.c" -printf '%f\n'

Ich habe langsam das Gefühl, dass es da noch ein anderen Befehl gibt.
 
Zuletzt bearbeitet:
hoffe doch das du von find /startpfad -name "${quelltext}\.c" den /startpfad ausgewechselt hast!?

EDIT:

ääääääääm, in deinem pdf find ich nur was von Compiler aufrufen usw.. Und unten noch einen kleinen C Code. Hast das falsche erwischt?
 
Zuletzt bearbeitet:
Habe eine Lösung gefunden: Trotzdem Danke

#!/bin/sh
quelltext=""
echo "Geben Sie den Dateinamen ein: "
read quelltext

if test -e "$quelltext"
then
echo "Datei vorhanden"
if (file $quelltext | grep "ASCII C" > /dev/null)
then
if (find . -maxdepth 1 -name "$quelltext" | grep ".c\>" > /dev/null)
then echo "Dateiendung vorhanden"
else echo "Dateiendung muss angehängt werden"
fi
else echo "Es handelt sich um keine ANSI C Datei"
fi
else echo "Datei nicht vorhanden"
fi
 
Zuletzt bearbeitet:
Hallo
Du hast deine Aufgabe editiert. Anfangs sagtest du, du suchst nach Dateien.


Ich kann übrigens deine pdf Datei nicht betrachten.


Aber einen Denkanstoß mag ich dir geben.

Was du suchst ist Variablenexpansion
Beispiel ohne grep
Code:
#!/bin/bash
PREFIX="";
SUFIX="";
read INPUT
PREFIX=${INPUT%\.c};
SUFIX=${INPUT//$PREFIX/};
echo Prefix $PREFIX;
echo Suffix $SUFIX;
if [ -z $SUFIX ];
then
echo "Kein Suffix mit angegebenen fuer $INPUT";
else
echo "Suffix $SUFIX angegeben fuer $INPUT";
fi
Bei find musst du lediglich den Punkt (\.) escapen, sonst führt das zu ungewollten Ergebnissen.
Gruß Wolfgang
 
Super Danke. Sowas habe ich auch noch gesucht.
PDF habe ich wieder gelöscht,da ich jetzt eine Lösung gefunden habe.
 
Hallo
Noch ein Hinweis:
Falls du auf jeden Suffix .* matchen willst, dann müsste
PREFIX=${INPUT%\.*} werden.

Gruß Wolfgang
PS Bitte editiere künftig nur wirkliche Tippfehler oder vergessene Zusätze, sonst verliert der gesamte Thread seinen logischen Zusammenhang.
 

Ähnliche Themen

Verzeichnis mit 1200 Dateien auf Verweise in Textdateien checken

Suchen und Ersetzen mit regulärem Ausdruck

Teilstring extrahieren

[gelöst] - for file in ... nur für bestimmte Endungen?

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Zurück
Oben