• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Dateinamen von Pfad entfernen

Decomposition

Antonowka
Registriert
09.12.06
Beiträge
363
Hallo,
ich möchte den Dateinamen samt Suffix von einem Pfad entfernen, sodass mir nur der Pfad ausgegeben wird:

file:///Volumes/Templates/file.ext
=>
file:///Volumes/Templates/

Ich bekomme alles mögliche mit den text delimitern hin, zum Beispiel dass reine ausgeben des Dateinamens; aber eben nicht in die andere Richtung. Ich dachte mir dass ich vielleicht sagen könnte "gehe von hinten bis zum ersten / und lösche alles bis dahin" ...
kann mir jemand helfen?

danke
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo,

keine Ahnung, wie man das "richtig" macht ....
Ich würde es so schreiben

set theFile to "file:///Volumes/Templates/file.ext"
set revChar to reverse of (characters of theFile) as string
set x to (offset of "/" in revChar) -- + 1
set con to text 1 thru -x of theFile

Das "+1" da ein POSIX Pfad ja nicht bei "/" endet
Würde es sich um ein Finder Objekt handeln, so ginge es einfacher mit "container of item"

Gruß
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Wenn du mit Posix-Pfaden hantierst (Unix-Notation mit Slashes) und nicht mit den Mac-typischen Pfaden (Doppelpunkt als Trennsymbol), dann hilft die Einbindung eines simples Shellbefehls.
Code:
set instring to "/Volumes/Murutzk Marah"
set outstring to do shell script "
    instring=\"" & instring & "\";
    instring=\"${instring%/}\";
    [ -d \"${instring}\" ]  &&
        echo \"${instring}\"  ||
        /usr/bin/dirname \"${instring}\"; "
 
Zuletzt bearbeitet:

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
dirname - so macht man das also richtig :•)

Danke
 

Decomposition

Antonowka
Registriert
09.12.06
Beiträge
363
super, vielen dank.
ich verwende deine lösung, sedna, die klappt sehr gut.

einziges problem: sollte der pfad doch einmal ohne dateinamen und ohne letzten Slash auftauchen, wird durch dieses script auch der letzte ordner entfernt:
file:///Volumes/Templates
=>
file:///Volumes/

Kann ich dem noch irgendwie entgegenwirken?
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Du könntest das auch mit sed versuchen:

Code:
[SIZE=2][B]set[/B] [COLOR=#3F7F00]instring[/COLOR] [B]to[/B] "/Volumes/Templates/file.ext
/Volumes/Templates/
/Volumes/Templates"
[B]set[/B] [COLOR=#3F7F00]outstring[/COLOR] [B]to[/B] [COLOR=#0016B0][B]do shell script[/B][/COLOR] "echo " & [COLOR=#6C04D4]quoted form[/COLOR] [B]of[/B] [COLOR=#3F7F00]instring[/COLOR] & " | sed 's/\\(.*\\/\\).*\\..*/\\1/g'"[/SIZE]

Wird zu:

Code:
"/Volumes/Templates/
/Volumes/Templates/
/Volumes/Templates"
 
Zuletzt bearbeitet:

Decomposition

Antonowka
Registriert
09.12.06
Beiträge
363
danke, Phil, mit deiner Lösung klappt es.
Mit deiner bei mir leider nicht, Rastafari :/

Danke euch!

VG
 

Decomposition

Antonowka
Registriert
09.12.06
Beiträge
363
Hab's kopiert, nicht abgeschrieben :)
Wenn ich dein Script bei mir ausführe, wird mir "/Volumes" ausgegeben, statt, wie gewünscht, /Volumes/Murutzk Marah.
Allerdings hilft auch das Anfügen eines / nichts ...
Wie dem auch sei, es klappt ja nun :)
 

Decomposition

Antonowka
Registriert
09.12.06
Beiträge
363
Murutzk Marah

kann aber ein Ordner sein, an den einfach kein / gehangen wurde.
Ich möchte, dass es nur entfernt wird, wenn es tatsächlich eine Datei ist.

Man müsste bei deinem Script wahrscheinlich einfach vorher abfragen, ob ein ".ext" im String vorhanden ist, um sicherzustellen dass es ich um einen Ordner handelt.
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Code:
set instring to "/Volumes/Murutzk Marah"
set outstring to do shell script "
    instring=\"" & instring & "\";
    instring=\"${instring%/}\";
    if  [ -f \"${instring}\" -o -h \"${instring}\" ];
    then
        /usr/bin/dirname \"${instring}\";
    elif  [ -d \"${instring}\" ];
    then
        echo \"${instring}\";
    else
        echo \"VOLL DER FEHLER\";
    fi; "
Die Prinzessin auf der Erbse, hm? :)
Wenn die Datei (oder Link) nicht existiert, klappts übrigens trotzdem nicht.
Und nein, es gibt in diesem Fall *keine* Möglichkeit herauszufinden ob der Name nun eine Datei oder einen Ordner bezeichnen soll, ein Hellseherprogramm gibts nicht. Und ich kann dir auch nicht sagen was du dann sonst tun solltest, als zB sowas wie oben.
 

Decomposition

Antonowka
Registriert
09.12.06
Beiträge
363
bin da nur so pingelig, weil ich nicht weiß, welchen Wert "instring" haben kann. der wert kommt von wo anders :)
leider gibt mir dein script aber immer "voll der fehler" aus ....
danke jedenfalls für die mühe.
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Ich würde es halt einfach mal mit einem existierenden Objekt versuchen...
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Hallo,
Code:
set somePath to path to desktop folder as string


set otherPath to POSIX file ((POSIX path of somePath) & "/..")

Viele Grüße
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Oder so:
Code:
[B]set[/B] aFile [B]to[/B] [I]POSIX file[/I] ("/Users/fyysh/test.txt") [B]as[/B] [I]alias
[/I][B]tell[/B] [I]application[/I] "Finder" [B]to[/B] [B]set[/B] aFileContainer [B]to[/B] [I]container[/I] [B]of[/B] aFile [B]as[/B] [I]alias[/I]
[B]return[/B] (POSIX path [B]of[/B] aFileContainer)