Anzeige:
Ergebnis 1 bis 11 von 11

Thema: [SH] Prüfen ob Pfad innerhald von Pfad ist

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.06.2002
    Beiträge
    40

    [SH] Prüfen ob Pfad innerhald von Pfad ist

    Hi,

    Gibt es eine Möglichkeit in bash/sh zu prüfen ob sich eine Datei unterhald eines Pfades befindet? Das entscheidende Kriterium ist: Die Datei existiert noch nicht. Also fallen find, usw weg.
    Ich werde es an einem Beispiel erläutern:

    Code:
    pfad_1="/home/user/test/dir/file"
    pfad_3="/home/user/test"
    # jetzt soll getestet werden, ob sich die Datei, die mit pfad_1
    # angegeben wurde unterhalb von dem Pfad, der in pfad_2 angegeben
    # befindet. (Dies ist hier der Fall. Wie teste ich das).
    # Schwierigkeit: Die Datei mit pfad_1 angegeben existiert noch _nicht_
    # Schwierigkeit 2: Es können auch ".." in den Pfadangaben sein.
    Der Sinn dieser ganzen Sache ist folgendermaßen.
    Ich habe ein script geschrieben, welches nun eine Datei kopieren soll. Der benutzer gibt pfad_1 an. Nun soll getestet werden, ob der Pfad in unterhalb eines gegebenen Verzeichnisses befindet. Das script soll nämlich nur in dieses Verzeichnis schreiben. Wenn dies nicht der Fall ist, soll es eine Fehlermeldung ausgeben.


    danke.

    MFG fsd.

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Eine Möglichkeit wäre z.B. die pfad_1 - Datei mit "touch" zu behandeln.

    Schwierigkeit 2 wäre dann ganz einfach mit
    ls -d -L $pfad_1
    zu umgehen. Anschliessend reicht was in der Art von
    Code:
    if echo $(ls -d -L $pfad_1) | grep -q "^$pfad_2"; then
    fi
    Touch sollte ja auch eventuell schon exisitierenden Dateien nicht schaden.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    16.06.2002
    Beiträge
    40
    Danke, das werde ich mir durch den Kopf gehen lassen.
    Es darf natürlich keinesfalls etwas beim Testen verändert werden. Ein touch wäre evtl akzeptabel.

    MFG fsd.

  4. #4
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    Code:
     echo /home/user/test/dir/file | grep -q "^/homer/user/test" && echo "ist drin" || echo "ist nicht drin"
    So vielleicht?

    Zur Erklärung:
    - Schreibe langen Pfad nach stdout
    - untersuche(grep) stdin ob /home/user/test am Anfang des Strings steht und
    - abhaengig vom Ergebnis zeige den entsprechenden Text an

  5. #5
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    und was wird aus dem da?
    # Schwierigkeit 2: Es können auch ".." in den Pfadangaben sein.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  6. #6
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    > und was wird aus dem da?
    > # Schwierigkeit 2: Es können auch ".." in den Pfadangaben sein.

    So'n Mist da denkt auch noch jemand mit. Aber man kann ja den relativen Pfad in einen absoluten umwandeln und dann erst das oben genannte.

    Code:
    D=`dirname "$relpath"`
    B=`basename "$relpath"`
    abspath="`cd \"$D\" 2>/dev/null && pwd || echo \"$D\"`/$B"
    gefunden bei Shelldorado

    -----

    Dazu der passende Mathematikerwitz:

    Ein Mathematiker und ein Ingenieur bekommen 2 Aufgaben gestellt:

    Aufgabe 1:
    Es steht ein Kühlschrank mit Bratwürsten drin neben einem Herd und einer Pfanne. Bereiten Sie eine Bratwurst zu.

    Das ist für beide kein Problem.

    Aufgabe 2:
    Wie Aufgabe 1 nur das der Kühlschrank jetzt im Keller steht.

    Der Ingenieur holt sich seine Bratwurst aus dem Keller und brät Sie ohne Zwischenfälle.

    Der Mathematiker hat es auch nach ca. 2 Stunden mit allen erdenklichen Hilfsmitteln geschafft den Kühlschrank alleine aus dem Keller hoch neben den Herd zu schleppen. Da jetzt das Problem auf ein bereits bekanntes zurückgeführt war konnte er in aller Ruhe die Bratwurst braten.
    Geändert von fork (10-10-2004 um 22:52 Uhr)

  7. #7
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    muss es ein Shell Skript sein? Wenn nein, dann hier eine Möglichkeit, daß mit Perl zu erledigen...da wird dann auch nicht temporär eine Datei angelegt oder sowas...
    Das Skript gibt ne 0 zurück, wenn die Datei nicht existiert und eine 1 wenn es bereits einen gleichnamigen Eintrag gibt.
    Dann kannst Du das in weitere Shell Skripte einbauen und mit test bzw. [ ] abfragen...

    Code:
    #!/usr/bin/perl -w
    use strict;
    
    my $retval=0;
    my $Datei = $ARGV[0];
    my @Pfade = split(/:/,$ENV{PATH});
    
    chomp($Datei);
    foreach my $Pfad (@Pfade)
    {
      print "Suche nach ".$Pfad .'/'. $Datei."...\n";
      if(-e $Pfad.'/'.$Datei)
      {
        $retval=1;
        last;
      }
    }
    exit($retval);
    hth, Michael

  8. #8
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    Oh - sorry.... ich habe totalen Blödsinn gepostet.
    Evtl. hätte ich Deinen Thread mal richtig lesen sollen
    Das PerlSkript überprüft nur, ob es eine als Parameter angegebene Datei irgendwo in $PATH bereits gibt. Sorry...

  9. #9
    Registrierter Benutzer
    Registriert seit
    29.12.2001
    Ort
    Berlin
    Beiträge
    231
    Was spricht eigendlich gegen das gute Alte -e ???
    PHP-Code:
    if [ -e $pfad_1 ] ;then
       
    echo "File $pfad_1 existiert"
     
    else
       echo 
    "File $pfad_1 existiert nicht"
     
    fi 
    tomes
    EDIT:
    PHP-Code:
    .
    -
    <datei>     datei existiert
    -<datei>     datei existiert und Leserecht
    -<datei>     datei existiert und Schreibrecht
    -<datei>     datei existiert und Ausführungsrecht
    -<datei>     datei existiert und ist einfache Datei
    -<datei>     datei existiert und ist Verzeichnis
    -<datei>     datei existiert und ist symbolisches Link
    -<datei>     datei existiert und ist nicht leer
    usw

    ************************************************
    Man(n oder Frau) muss nicht alles wissen,
    Man(n oder Frau) muss nur wissen wo es steht !
    ************************************************
    http://www.sandtom.net
    ICQ 176436259

  10. #10
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von tomes
    Was spricht eigendlich gegen das gute Alte -e ???
    Nichts ausser das das in dem Zusammenhang nicht gefragt ist. Siehe Frage.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  11. #11
    Registrierter Benutzer
    Registriert seit
    29.12.2001
    Ort
    Berlin
    Beiträge
    231
    Achso, jetzt verstehe ich
    Dann ebend einfach
    PHP-Code:
    .
    file=`echo $pfad_1 | sed s/.*[\/]//g`
    dir=`echo $pfad_1 | sed s/$file//g`
    if [ -
    d $dir ] ;then
       Verzeichniss exisitiert
    else
       
    Mach was
    fi 
    tomes
    ************************************************
    Man(n oder Frau) muss nicht alles wissen,
    Man(n oder Frau) muss nur wissen wo es steht !
    ************************************************
    http://www.sandtom.net
    ICQ 176436259

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •