ausgabe von find1 zu find2 übergeben

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von dosenfleisch, 14.05.2007.

  1. #1 dosenfleisch, 14.05.2007
    dosenfleisch

    dosenfleisch Foren As

    Dabei seit:
    29.03.2007
    Beiträge:
    75
    Zustimmungen:
    0
    hallo,

    ich möchte in dir a dateien finden, die schon einige tage nicht mehr modifiziert wurden. habe ich diese gefunden, möchte ich in dir b die unterverzeichnisse scannen, in denen sich eine datei befindet, die den dateinamen aus dir a enthält.
    habe ich das richtige unterverzeichnis mit dieser datei gefunden, soll das unterverzeichnis gelöscht werden.

    geschafft habe ich bisher:
    ich finde 5 tage alte dateien mit
    Code:
    find /media/hda3/dira -maxdepth 1 -type f -mtime +5 -exec echo {} \ 
    
    und ich finde im verzeichnis b dateien, die einen bestimmten string enthalten
    Code:
    find /media/hda3/dirb/textfile -print | xargs grep -l teststring
    
    nun schaffe ich es aber nicht, beides miteinander zu verbinden.
    also der bei find 1 gefundene dateiname soll bei find 2 der zu suchende string sein.

    mit welchem befehl macht man das?

    und wie ermittle ich das verzeichnis, in dem sich diese datei befindet, sodaß ich es löschen kann? mit pwd vielleicht?
     
  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. #2 Fallout, 15.05.2007
    Zuletzt bearbeitet: 15.05.2007
    Fallout

    Fallout Doppel-As

    Dabei seit:
    02.03.2007
    Beiträge:
    120
    Zustimmungen:
    0
    Hi,

    Grundsätzlich: Wenn Du beides miteinander "verbinden" möchtest, geht das am besten indem Du sie untereinander verschachtelst, so daß der 2. Befehl jede einzelne Ausgabe des 1. Befehls zur Bearbeitung übergeben bekommt:
    Code:
    find /media/hda3/dira -maxdepth 1 -type f -mtime +5 [i][b]-exec echo {} \;[/b][/i] | \
     while read zeile; do
     find /media/hda3/dirb/textfile -print | xargs grep -l $zeile
    done
    Das "-exec echo {} \;" ist überflüssig, da find ohne -exec sowieso die zutreffenden Dateien ausgibt.



    erscheint mir hier etwas umständlich. Das läßt sich auch mit grep alleine machen (ich nehme mal an, Du willst 'dirb' durchsuchen lassen, und nicht nur 'textfile'):
    Code:
    grep -R teststring /media/hda3/dirb/*


    Letztendlich würde ich Dir für Dein Vorhaben folgendes vorschlagen:
    Code:
    find /media/hda3/dira -maxdepth 1 -type f -mtime +5 -exec grep -RH "{}" /media/hda3/dirb/* \;
    Das durchsucht den Inhalt aller Dateien in .../dirb rekursiv nach dem Vorkommen des vollen Pfades (z. B. "/media/hda3/dira/meinedatei")
    Möchtest Du nur nach dem Dateinamen suchen lassen, würde ich es so machen:
    Code:
    find /media/hda3/dira -maxdepth 1 -type f -mtime +5 -printf "%f\n" | \
     while read dateiname; do
     grep -R "$dateiname" /media/hda3/dirb/*
    done
    Gruß Daniel
     
  4. #3 dosenfleisch, 16.05.2007
    Zuletzt bearbeitet: 16.05.2007
    dosenfleisch

    dosenfleisch Foren As

    Dabei seit:
    29.03.2007
    Beiträge:
    75
    Zustimmungen:
    0
    ich danke dir sehr für deine hilfe.
    eines habe ich aber noch:

    grep findet die richtigen dateien (letztes bsp von dir) wirft mir aber folgendes aus:

    Code:
    Übereinstimmungen in Binärdatei /media/hda3/dirb/dirf/textfile.
    Übereinstimmungen in Binärdatei /media/hda3/dirb/dirg/textfile.
    Übereinstimmungen in Binärdatei /media/hda3/dirb/dirt/textfile.
    
    nun versuche ich seit stunden mit google herauszufinden, wie ich mit expr oder sed an diesen dateinamen komme. ich kriege es einfach nicht gebacken.

    weißt du auch da noch rat?

    Edit: genau genommen brauche ich den ordner, in dem sich das textfile befindet (unterhalb von dirb) um ihn zu löschen, aber wenn ich den dateinamen habe, kann ich auch nur diese löschen, was ersteinmal genügen würde.
     
  5. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Etwa sowas:
    Code:
    grep -R teststring /media/hda3/dirb/* | cut -d' ' -f4 | xargs dirname
    
    Gruss
    d22
     
  6. #5 Fallout, 16.05.2007
    Zuletzt bearbeitet: 16.05.2007
    Fallout

    Fallout Doppel-As

    Dabei seit:
    02.03.2007
    Beiträge:
    120
    Zustimmungen:
    0
    Hi,

    Dizzgo hat Dir zum herausschneiden des Pfades aus der grep-Ausgabe schon ein Beispiel gegeben.
    Du kannst Dir das Ganze aber auch sparen, wenn Du grep noch die Option -l mitgibst:
    Code:
     grep -l -R "$dateiname" /media/hda3/dirb/*
    Damit werden Dir nur die zutreffenden Dateipfade ausgegeben.


    Code:
     dirname $(grep -l -R "$dateiname" /media/hda3/dirb/*)
    würde Dir dann nur das entsprechende Verzeichnis zu dem herausgefundenen Dateipfad ausgeben.

    Nur nochmal zum Verständnis: Möchtest Du Dateien ausfindig machen, die in 'dira' vorkommen, max. 5 Tage alt sind und deren Namen im Inhalt bestimmter (Text-)Dateien aus 'dirb' vorkommen oder nur herausfinden, welche Dateien sowohl in 'dira' als auch in 'dirb' vorkommen, um diese dann aus 'dirb' zu löschen?

    Ich hatte Dein
    auf den Inhalt bezogen verstanden. Aber ich vermute jetzt, daß Du eher den Dateinamen damit meintest:

    Code:
    find /media/hda3/dira -maxdepth 1 -type f -mtime +5 -printf "%f\n" | \
     while read dateiname; do
     find -name "$dateiname" /media/hda3/dirb/ | \
      while read doppelgefunden; do
      rm -v "$doppelgefunden"
      rmdir $(dirname "$doppelgefunden") 2>/dev/null && echo "Leeres Verzeichnis von '$doppelgefunden' geloescht."
     done
    done
    Ich denke im Großen und Ganzen sind die Vorgänge hier verständlich - falls nicht: manpages lesen ;-) oder notfalls nachfragen.

    Gruß Daniel
     
  7. #6 dosenfleisch, 16.05.2007
    Zuletzt bearbeitet: 16.05.2007
    dosenfleisch

    dosenfleisch Foren As

    Dabei seit:
    29.03.2007
    Beiträge:
    75
    Zustimmungen:
    0
    haargenau.

    ja, wirklich - habe viel gelernt.
    zu deiner frage: ich suche in dirb in textdateien, in denen sich der string (dateiname dira) befindet.

    herzlichen dank!
     
  8. #7 dosenfleisch, 23.05.2007
    dosenfleisch

    dosenfleisch Foren As

    Dabei seit:
    29.03.2007
    Beiträge:
    75
    Zustimmungen:
    0
    Code:
    grep -R teststring /media/hda3/dirb/* | cut -d' ' -f4 | xargs dirname
    
    bitte, wie heißt denn das äquivalent zu "xargs dirname", wenn ich den dateinamen suche?

    mit folgendem code bleibt leider ein punkt nach dem dateinamen übrig.
    Code:
    grep -R teststring /media/hda3/dirb/* | cut -d' ' -f4
    
    danke für eure hilfe!
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
  11. #9 dosenfleisch, 23.05.2007
    dosenfleisch

    dosenfleisch Foren As

    Dabei seit:
    29.03.2007
    Beiträge:
    75
    Zustimmungen:
    0
    Code:
    grep -R teststring /media/hda3/dirb/* | cut -d' ' -f4 | basename $datei . 
    
    so dann wohl.
    vielen dank!
     
Thema:

ausgabe von find1 zu find2 übergeben

Die Seite wird geladen...

ausgabe von find1 zu find2 übergeben - Ähnliche Themen

  1. Kurztipp: Unerwünschte grep-Ausgaben vermeiden

    Kurztipp: Unerwünschte grep-Ausgaben vermeiden: Selbst aus altbekannten Programmen kann man oft noch einiges mehr herausholen - man muss sich nur einmal gründlich mit ihnen auseinandersetzen....
  2. Ausgabe von mkdir -p wegwerfen

    Ausgabe von mkdir -p wegwerfen: Hallo, ich stehe gerade auf den schlauch. in meinen BASH Script lege ich mit mkdir -p ein verzeichnis an. Das Script gibt dann immer auf der...
  3. Unix Shell echo/ausgabe solange Bedingung ...

    Unix Shell echo/ausgabe solange Bedingung ...: Hallo liebe Unix User, da ich relativ neu bin, was Linux / Unix angeht stehe ich gerade komplett auf dem Schlauch! Problem: Aus mehreren...
  4. »Einführung in Tcl/Tk« in neuer Ausgabe

    »Einführung in Tcl/Tk« in neuer Ausgabe: Das Buch »Einführung in Tcl/Tk« wendet sich an Anfänger, die die Programmiersprache Tcl/Tk erlernen wollen. Der Titel kann kostenlos für die...
  5. PHP 6 oder 7: Debatte über die Versionierung der nächsten Ausgabe von PHP

    PHP 6 oder 7: Debatte über die Versionierung der nächsten Ausgabe von PHP: In der Community der Scriptsprache PHP, die zur Erstellung dynamischer Webseiten und Webanwendungen dient, wird gerade kontrovers diskutiert,...