Ordnersuche via Terminal unter Ausschluss bestimmter Ordner

Diskutiere das Thema Ordnersuche via Terminal unter Ausschluss bestimmter Ordner im Forum Mac OS - Unix & Terminal. Ich möchte von einem Root-Verzeichnis aus nur alle Ordner finden. Bedingung ist, Ordner mit bestimmten Namen in den Resultaten nicht zu...

Schlagworte:
  1. tiftich

    tiftich Thread Starter Mitglied

    Beiträge:
    22
    Zustimmungen:
    0
    Mitglied seit:
    23.01.2019
    Ich möchte von einem Root-Verzeichnis aus nur alle Ordner finden. Bedingung ist, Ordner mit bestimmten Namen in den Resultaten nicht zu berücksichtigen. Soweit kein Problem.
    Die Schwierigkeiten beginnen, sobald der Orderpfad eine Extension hat, also Plug-ins, Frameworks (.frameworks), Programme (.app) etc. Ich möchte in meinen Resultaten nämlich nur "echte" Finder-Ordner haben.

    Mein Ordner "test":

    Code:
    ls -R
    FolderBB   FolderCC.com   file       folderAA
    
    ./FolderBB:
    fileBB
    
    ./FolderCC.com:
    FolderDD   fileCC
    
    ./FolderCC.com/FolderDD:
    fileDD
    ./folderAA:
    fileAA
    
    [​IMG]
    1. Finde nur Ordner. Hat einer davon irgendwas hinten mit AA im Namen, ignoriere ihn und seine Inhalte:

    Code:
    find . -type d \( -type d -name *AA -prune -o -print \)
    .
    ./FolderBB
    ./FolderCC.com
    ./FolderCC.com/FolderDD
    
    So weit, so gut. Aber jetzt:

    2. Finde nur Ordner. Hat einer davon eine Extension im Namen, z.B. ".com", ignoriere ihn und seine Inhalte. Da ich nicht nur nach ".com", sondern allen vorkommenden Extensions suchen möchte, habe ich es so probiert:

    Code:
    find . -type d \( -type d -name '*.*' -prune -o -print \)
    
    keine Resultate.

    Code:
    find . -type d \( -type d -name "*.*" -prune -o -print \)
    
    nö.

    Code:
    find . -type d \( -type d -name '*.c*' -prune -o -print \)
    .
    ./folderAA
    ./FolderBB
    
    Korrekt. Aber wie kommt das? Warum wird die Angabe "*.*" nicht akzeptiert?
    (Im Übrigen funktioniert auch '*.c*' statt "*.c*")

    Wie muss ich einen Ordernamen, den ich mit Wildcards in der Extension suchen will, korrekt escapen?
    Viele Dank für Erhellung!
     

    Anhänge:

    • test.jpg
      test.jpg
      Dateigröße:
      25,6 KB
      Aufrufe:
      69
  2. tiftich

    tiftich Thread Starter Mitglied

    Beiträge:
    22
    Zustimmungen:
    0
    Mitglied seit:
    23.01.2019
    Schade, ich dachte, das Problem bei einer Suche im Terminal zwischen Mac-Ordnern und "directory" unterscheiden zu müssen, hätte Antworten gebracht…
    Eine Mac-Anwendung z.b. ist ja nichts anderes als eine directory mit der Extension "app". Und z.b. diese sollen eben ausgeschlossen werden.
     
  3. oneOeight

    oneOeight Mitglied

    Beiträge:
    51.747
    Zustimmungen:
    5.388
    Mitglied seit:
    23.11.2004
    das kommt drauf an, wie das such pattern interpretiert wird.
    wenn es als regex ausgewertet wird, dann steht der punkt . für ein beliebiges zeichen.
    um den dann als punkt selber zu kriegen müsstest du mal \. versuchen.
     
  4. tiftich

    tiftich Thread Starter Mitglied

    Beiträge:
    22
    Zustimmungen:
    0
    Mitglied seit:
    23.01.2019
    ja, so funktioniert es:
    Code:
    find . -type d -not -name '*\.*'
    ./folderAA
    ./FolderBB
    ./FolderCC.com/FolderDD
    
    oder auch so:
    Code:
    find . -type d -not -name '*[.]*'
    ./folderAA
    ./FolderBB
    ./FolderCC.com/FolderDD
    
    jetzt muss ich nur noch verhindern, dass er im Ordner "FolderCC.com" sucht.
    das bisherige konstrukt mit -prune funktioniert so nämlich nicht mehr:
    Code:
    find . -type d \( -type d -name '*\.*' -prune -o -print \)
    
    liefert keine Resultate…
     
  5. tiftich

    tiftich Thread Starter Mitglied

    Beiträge:
    22
    Zustimmungen:
    0
    Mitglied seit:
    23.01.2019
    Code:
    find . -type d \( -name '*.c*' -prune -o -print \)
    .
    ./folderAA
    ./FolderBB
    
    findet nur Verzeichnisse, aber solche mit "*.c*" im Dateinamen werden nicht durchsucht.

    Code:
    find . -type d \( -name '*.c*' -or -name '*.d*' -prune -o -print \)
    .
    ./folderAA
    ./FolderBB
    ./FolderCC.com
    ./FolderCC.com/FolderDD
    
    -prune wird erst ausgeführt, wenn die direkt vorangestellte Bedingung "’*.d*' im Dateinamen" erfüllt ist.
    Daher werden Ordner mit "*.c*" im Ergebnis angezeigt, weil er die vor *.d*" findet und ausgibt.
    Ich vermute also, dass -o seriell arbeitet und ich stattdessen eine Schleife/Liste brauche, die -prune abarbeitet.

    Viel einfacher wäre natürlich, den Punkt irgendwo in einem Verzeichnisnamen direkt anzusprechen.
    Ich krieg's aber nicht hin:

    Code:
    find . -type d \( -name \. -prune -o -print \)
    
    oder
    Code:
    find . -type d \( -name '\.' -prune -o -print \)
    
    oder
    Code:
    find . -type d \( -name '\.*' -prune -o -print \)
    
    oder
    Code:
    find . -type d \( -name '*.*' -prune -o -print \)
    
    oder
    Code:
    find . -type d \( -name '.*' -prune -o -print \)
    
    findet nichts. Welche Möglichkeiten gibt es noch? grep? {}?
    Sorry, oneOeight…
     
  6. oneOeight

    oneOeight Mitglied

    Beiträge:
    51.747
    Zustimmungen:
    5.388
    Mitglied seit:
    23.11.2004
    den oder vergleich in klammer setzen, damit der zuerst evaluiert wird?
     
  7. tiftich

    tiftich Thread Starter Mitglied

    Beiträge:
    22
    Zustimmungen:
    0
    Mitglied seit:
    23.01.2019
    Das merkwürdige ist, dass es im "positiven" funktioniert:
    Code:
    find . -type d -name '*.*'
    .
    ./FolderCC.com
    
    OK!

    Code:
    find . -type d \( -name '*.*' -prune -o -print \)
    
    liefert nichts. Egal, wie der verdammte Punkt escaped ist.
    @oneOeight: eine Klammerung innerhalb der Bedingung für -type d habe ich nirgendwo in tuts oder mans gesehen.
    Wie sollte die konkret aussehen und was sollte die evaluieren? -prune funktioniert doch überhaupt nur, wenn irgendein Befehl dahintersteht, so liest man es jedenfalls.

    grep und regex habe ich anhand zahlreicher angeblich funktionerender Lösungen durchprobiert – funktioniert alles nicht im Kontext mit -prune

    Scheint also unter BBS/OSX nicht möglich zu sein. Soll ich das glauben…?
     
  8. oneOeight

    oneOeight Mitglied

    Beiträge:
    51.747
    Zustimmungen:
    5.388
    Mitglied seit:
    23.11.2004
    Code:
    find . -type d \( \( -name '*.c*' -or -name '*.d*' \) -prune -o -print \)
    
    so war das gemeint, der soll erst die oder bedingung evaluieren und dann den rest…
     
  9. tiftich

    tiftich Thread Starter Mitglied

    Beiträge:
    22
    Zustimmungen:
    0
    Mitglied seit:
    23.01.2019
    etwas bizarr und umständlich, aber das folgende macht tatsächlich, was es soll…
    Code:
    find . -type d \( \( -name '*.a*' -or -name '*.b*' -or -name '*.c*' -or -name '*.d*' -or -name '*.e*' -or -name '*.f*' -or -name '*.g*' -or -name '*.h*' -or -name '*.i*' -or -name '*.j*' -or -name '*.k*' -or -name '*.l*' -or -name '*.m*' -or -name '*.n*' -or -name '*.d*' -or -name '*.o*' -or -name '*.p*' -or -name '*.q*' -or -name '*.r*' -or -name '*.s*' -or -name '*.t*' -or -name '*.u*' -or -name '*.v*' -or -name '*.x*' -or -name '*.y*' -or -name '*.z*' \) -prune -o -print \)
    .
    ./folderAA
    ./FolderBB
    
    
    warum es in den suchstrings einen buchstaben braucht, um dann auch wildcards zu akzeptieren, ist mir allerdings ein rätsel.
     
  10. oneOeight

    oneOeight Mitglied

    Beiträge:
    51.747
    Zustimmungen:
    5.388
    Mitglied seit:
    23.11.2004
    du solltest dich mal mehr mit regex befassen.
    da gibt es nämlich [a-z].
     
  11. tiftich

    tiftich Thread Starter Mitglied

    Beiträge:
    22
    Zustimmungen:
    0
    Mitglied seit:
    23.01.2019
    ja, scho' klar… so geht's natürlich auch:
    Code:
    find . -type d \( -name '*.[a-z]*' -prune -o -print \)
    
     
  12. Olivetti

    Olivetti Mitglied

    Beiträge:
    10.411
    Zustimmungen:
    3.123
    Mitglied seit:
    09.12.2005
    oder so:
    Code:
    find . -type d -name '*.?*' -prune -or -type d -print
    
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
mp3cat und der Fluch der Dateinamen Mac OS - Unix & Terminal 11.08.2019
Tag aus markierter Datei wegnehmen Mac OS - Unix & Terminal 04.07.2019
Öffnen eines Ordners nach komprimieren abstellen Mac OS - Unix & Terminal 04.07.2019
(base) im Mac terminal Mac OS - Unix & Terminal 26.05.2019
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite weitersurfst, akzeptierst du unseren Einsatz von Cookies. Akzeptieren Weitere Informationen...