Terminal find-Befehl Verzeichnis ausklammern

Diskutiere mit über: Terminal find-Befehl Verzeichnis ausklammern im Mac OS X - Unix & Terminal Forum

  1. comrat

    comrat Thread Starter MacUser Mitglied

    Beiträge:
    112
    Zustimmungen:
    0
    Registriert seit:
    27.12.2004
    Die Lösung scheinen wir in Beitrag #6 zu haben:
    http://www.macuser.de/forum/showpost.php?p=1961710&postcount=6




    Hallo,

    sollten Fragen zum Terminal von MacOSX 10.3.5 hier falsch sein, bitte ich darum diesen Thread hier komplett zu löschen. Danke.

    Bei der Programmierung von PHP4 habe ich immer ein Terminal daneben geöffnet um Funktionen oder globale Variablen schneller in meinen Dateien zu finden. Dateinamen, die das Wort Kopie enthalten und temporäre Dateinamen, die bei mir alle mit x beginnen, sollen bei meiner Suche nicht berücksichtigt werden. Dateien, deren Namen mit der Extension txt oder php versehen sind, sind genau diejenigen, die ich durchsuche.

    find . \! -name "*Kopie*" \! -name "x*" -and \( -name "*.txt" -or -name "*.php" \) -exec grep -inr "meinsuchstring" {} \; -print

    Seitdem ich den phpmyadmin aber im selben Ausgangsverzeichnis ablegen mußte, durchsuche ich auch dort abgelegte Dateien, die im Namen auf php enden. Das möchte ich normalerweise nicht. Selbst wenn wir jetzt entscheiden sollten, daß das Verzeichnis phpmyadmin verschoben werden sollte, bitte ich Euch mir bei der Lösung dieses Problems zu helfen. Da sind noch mehr, kleinere Verzeichnisse, die ich ignorieren möchte. *bei gesenktem Blick zieht der rechte Fuß "verlegen" Kreise in den Sand*

    Wie muß ich meinen kompletten find-Befehl schreiben, damit ein solches Verzeichnis ignoriert wird?

    Ganz herzlichen Dank für Eure Zeit und Mühe.

    Gruß
     
    Zuletzt bearbeitet: 18.07.2006
  2. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.777
    Zustimmungen:
    3.629
    Registriert seit:
    23.11.2004
    mach doch ein einfach ein "grep -v verzeichnisname" hinter das find...
    dann schmeisst grep das raus...
     
  3. comrat

    comrat Thread Starter MacUser Mitglied

    Beiträge:
    112
    Zustimmungen:
    0
    Registriert seit:
    27.12.2004
    Bitte komplett Befehl angeben

    Ich weiß, es klingt dreist, aber wie muß dann der gesamte Befehl aussehen? Entschuldige, als ich nach vielen Jahren wieder mit unix anfing, brauchte ich für meinen oben angegebenen Feind, äh, find sehr lange, bis ich alle erforderlichen Parameter wieder zusammen hatte und dann auch noch herausgefunden hatte, daß einige der Leerzeichen zwingend sind. aaaarrgh ;)

    Der, von Dir angegebene Parameter -v bewirkt beim grep laut Manual man, daß die Suche invertiert interpretiert wird. Wolltest Du wirklich darauf hinaus?

    Ich möchte alles durchsuchen, das am aktuellen Verzeichnis "." dranhängt, nur eben ein oder zwei bestimmte Unterverzeichnisse nicht. Leider habe ich keinen Fachbegriff für diese Vorgehensweise, um die Suche selber abschließen zu können, was ich sehr gerne täte. :(

    Danke und Gruß
     
    Zuletzt bearbeitet: 18.07.2006
  4. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.777
    Zustimmungen:
    3.629
    Registriert seit:
    23.11.2004
    du nimmst einfach dein find von oben und pappst ein "| grep -v verzeichnisname" dahinter, dann gibt grep alles aus bis auf sachen wo verzeichnisname mit drin ist...
     
  5. comrat

    comrat Thread Starter MacUser Mitglied

    Beiträge:
    112
    Zustimmungen:
    0
    Registriert seit:
    27.12.2004
    Verzeichnis wird durch, Trefferzeilen mit seinem Namen aber gelöscht

    Habe ich jetzt gemacht, ungläubig zwar, aber mutig vorangestürmt ;)

    So sieht es normalerweise aus:

    Code:
    ComRats-Computer:~/Documents/p00/p44/p44_ comrat$ find . \! -name "*Kopie*" \! -name "x*" -and \( -name "*.txt" -or -name "*.php" \) -exec grep -inr "function.*print.*prev" {} \; -print
    201:    function print_navigation_prev($name_of_this_page) {
    ./php4/include_navigation.php
    261:    function printPreview() {
    ./phpmyadmin/libraries/Theme.class.php
    338:    function printPreviews()
    ./phpmyadmin/libraries/Theme_Manager.class.php
    ComRats-Computer:~/Documents/p00/p44/p44_ comrat$ 
    
    
    So sieht es, ergänzt um Deinen Vorschlag, aus:

    Code:
    ComRats-Computer:~/Documents/p00/p44/p44_ comrat$ find . \! -name "*Kopie*" \! -name "x*" -and \( -name "*.txt" -or -name "*.php" \) -exec grep -inr "function.*print.*prev" {} \; -print | grep -v phpmyadmin
    201:    function print_navigation_prev($name_of_this_page) {
    ./php4/include_navigation.php
    261:    function printPreview() {
    338:    function printPreviews()
    ComRats-Computer:~/Documents/p00/p44/p44_ comrat$ 
    
    Scheinbar wurden nur die gefundenen Zeilen, die den Verzeichnisnamen enthalten ausgeklammert. Bei der Suche sollte das Verzeichnis aber gar nicht erst durchsucht werden. Und nun? ;) Muß nicht der find eine Erweiterung seiner Parameter erfahren?

    Danke und Gruß
    *blättert Handbücher*
     
    Zuletzt bearbeitet: 18.07.2006
  6. comrat

    comrat Thread Starter MacUser Mitglied

    Beiträge:
    112
    Zustimmungen:
    0
    Registriert seit:
    27.12.2004
    Lösung gefunden?

    Hallo,

    ich glaube ich habe die Lösung jetzt doch gefunden:

    Code:
    find . \! -path './phpmyadmi*' \! -name "*Kopie*" \! -name "x*" -and \( -name "*.txt" -or -name "*.php" \) -exec grep -inr "function.*print.*prev" {} \; -print
    201:    function print_navigation_prev($name_of_this_page) {
    ./php4/include_navigation.php
    
    Ergänze ich den Befehl find um den Parameter -path dann durchsucht er nur die Verzeichnisse die der Angabe im path-String entsprechen. Mit \! negiere ich diese Bedingung, ergo werden alle Unterverzeichnisse durchsucht, nur die nicht, die mit diesem String im Verzeichnisnamen beginnen.

    Ausschnitt des Befehls:
    Code:
    \! -path './phpmyadmin*'
    
    Sollte ich mich irren, bin ich für jeden konstruktiven Hinweis dankbar.

    Der Ansatz von oneOeight scheint auch sehr gut zu sein, allerdings müßte dazu jeder gefundene Zeileninhalt mit dem relativen Pfad beginnen, oder? Wie man diesen zusätzlich zur Zeilennummer ausgibt, ist mir im Moment nicht geläufig. Danke, oneOeight.

    Gruß
     
    Zuletzt bearbeitet: 15.07.2006
  7. dpr

    dpr MacUser Mitglied

    Beiträge:
    519
    Zustimmungen:
    0
    Registriert seit:
    04.04.2006
    Ein 'exclude' würde ich eher so

    Code:
    find . -path './Home' -prune -o -print
    
    realisieren. Die Geschichte mit dem grep finde ich deswegen nicht ganz optimal, da Du damit nicht mehr unterscheiden kannst, ob Du nun einen Verzeichnisnamen oder irgendeinen anderen Bestandteil des Pfades entfernst.

    Gruß, Denny
     
  8. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    In der Z Shell könnte man auf das 'find' vollständig verzichten und das auswählen der gewünschten Dateien komplett über das globbing der Shell realisieren.
    Allerdings muss man auch hier eine wenig Mühe auf die Zusammenstellung der entsprechenden Syntax verwenden.
     
Die Seite wird geladen...
Ähnliche Themen - Terminal find Befehl Forum Datum
Programmieranfängerin - Probleme mit Terminal Mac OS X - Unix & Terminal 23.11.2016
Fotos via Terminal extrahieren aus iTunes Backups Mac OS X - Unix & Terminal 21.11.2016
Alte Dateien mit Terminal finden Mac OS X - Unix & Terminal 16.10.2016
Terminal erinnert sich nicht mehr... Mac OS X - Unix & Terminal 10.08.2016
"android" im Terminal Mac OS X - Unix & Terminal 06.08.2016

Diese Seite empfehlen

Benutzerdefinierte Suche