Dateiname vergleichen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von fdai160X, 12.04.2006.

  1. #1 fdai160X, 12.04.2006
    Zuletzt bearbeitet: 12.04.2006
    fdai160X

    fdai160X Jungspund

    Dabei seit:
    12.04.2006
    Beiträge:
    15
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. codc

    codc /dev/null

    Dabei seit:
    12.01.2004
    Beiträge:
    607
    Zustimmungen:
    0
    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
     
  4. #3 fdai160X, 12.04.2006
    Zuletzt bearbeitet: 12.04.2006
    fdai160X

    fdai160X Jungspund

    Dabei seit:
    12.04.2006
    Beiträge:
    15
    Zustimmungen:
    0
    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.
     
  5. #4 Wolfgang, 12.04.2006
    Zuletzt bearbeitet: 12.04.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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$/
     
  6. #5 fdai160X, 12.04.2006
    fdai160X

    fdai160X Jungspund

    Dabei seit:
    12.04.2006
    Beiträge:
    15
    Zustimmungen:
    0
    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 ?
     
  7. #6 Wolfgang, 12.04.2006
    Zuletzt bearbeitet: 12.04.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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.
     
  8. #7 fdai160X, 13.04.2006
    Zuletzt bearbeitet: 13.04.2006
    fdai160X

    fdai160X Jungspund

    Dabei seit:
    12.04.2006
    Beiträge:
    15
    Zustimmungen:
    0
    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.
     
  9. #8 StyleWarZ, 13.04.2006
    Zuletzt bearbeitet: 13.04.2006
    StyleWarZ

    StyleWarZ Profi Daten Verschieber

    Dabei seit:
    05.03.2004
    Beiträge:
    1.929
    Zustimmungen:
    0
    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?
     
  10. #9 fdai160X, 13.04.2006
    Zuletzt bearbeitet: 13.04.2006
    fdai160X

    fdai160X Jungspund

    Dabei seit:
    12.04.2006
    Beiträge:
    15
    Zustimmungen:
    0
    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
     
  11. #10 Wolfgang, 13.04.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
  12. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  13. #11 fdai160X, 13.04.2006
    fdai160X

    fdai160X Jungspund

    Dabei seit:
    12.04.2006
    Beiträge:
    15
    Zustimmungen:
    0
    Super Danke. Sowas habe ich auch noch gesucht.
    PDF habe ich wieder gelöscht,da ich jetzt eine Lösung gefunden habe.
     
  14. #12 Wolfgang, 13.04.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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.
     
Thema:

Dateiname vergleichen

Die Seite wird geladen...

Dateiname vergleichen - Ähnliche Themen

  1. [FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind

    [FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind: Moin Gemeinde, ich habe ein Skript welches Emails abholt und weiterverarbeitet, manche müssen ausgedruckt werden. Nun hat sich herausgestellt...
  2. Einfaches Shellscript - dateinamen ändern

    Einfaches Shellscript - dateinamen ändern: Hey, kann mir jemand vielleicht bei diesem miniscript helfen? ich habe dateien die folgendermaßen aussehen MM-DD-YY-dateiname und...
  3. Dateiname einer Befehlsausgabe als Variable festlegen

    Dateiname einer Befehlsausgabe als Variable festlegen: Hallo zusammen, ich suche mit pdfgrep -H -R 1528/12/11 *nach einem bestimmten Ausdruck. Ausgabe ist z.B.: ---------- 305448.pdf:Mein...
  4. Wie verschiedene Pattern in diversen Dateinamen finden und ersetzen?

    Wie verschiedene Pattern in diversen Dateinamen finden und ersetzen?: Hi Leute. Ich habe ein kleines Problem. Ich möchte mittels Bash nach bestimmten pattern in Dateinamen suchen und diese durch "nichts"...
  5. Wie finde ich Leerzeichen im dateinamen

    Wie finde ich Leerzeichen im dateinamen: Hallo, ich habe ein script mit einer Schleife über alle Dateien in einem Verzeichnis. #!/bin/sh for i in `ls *` do echo $i...