problem mit find und grep

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
dfo231
Beiträge: 7
Registriert: 13.02.2016 21:09:05

problem mit find und grep

Beitrag von dfo231 » 13.02.2016 21:21:20

Hallo Leute

Ich hoffe auf Hilfe bei euch.
Ich möchte in einen Verzeichnis die Dateien nach ein Stichwort durchsuchen und wenn das
Stichwort enthalten ist in ein anderen Verzeichnis verschieben, die restlichen Dateien sollen
unberührt bleiben.

Mit der Befehlszeile komme ich nicht richtig weiter:

find /verzeichnis/A/ -exec grep -i 'suchwort' /dev/null -exec mv {} /zielverzeichnis/working \;

mit den befehl finde ich zwar die Dateien mit den gesuchten Inhalt, habe
dann eine Ausgabe welche Dateien, aber ich muss dann alles mit Hand verschieben.

find /verzeichnis/A/ -exec grep - i 'suchwort' /dev/null {} \;

Vielen dank für die Hilfe

Gruß Dennis

Benutzeravatar
heisenberg
Beiträge: 3555
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: problem mit find und grep

Beitrag von heisenberg » 13.02.2016 21:53:16

Hallo dfo,

find und grep sind schon einmal die richtigen Kandidaten. Die Anwendung stimmt allerdings noch nicht so ganz. Da ist vielleicht nochmal ein bisschen die Lektüre der Manpages hilfreich.

find /verzeichnis/A/ -exec grep - i 'suchwort' /dev/null {} \;

Hiermit suchst Du in /verzeichnis/A und zwar in jedem enthaltenene Verzeichnis und jeder Datei den blauen grep Befehl aus. Das /dev/null, was Du hier zusätzlich durchsuchst ist hier überflüssig. Wahrscheinlich möchtest Du die Fehlerausgabe umleiten, was dann so geht:

find /verzeichnis/A/ -exec grep - i 'suchwort' {} \; 2>/dev/null

Bei Deinem speziellen Problem brauchst Du find eigentlich gar nicht zu bemühen - grep reicht schon aus:

grep -lr "suchwort" /verzeichnis/A/

Jetzt hast Du die Liste von Dateien die dich interessiert. Die kannst Du jetzt einlesen und kopieren:

Code: Alles auswählen

grep -lr "suchwort" /verzeichnis/A | while read dateiname ; do
   mv "$dateiname" /verzeichnis/neuer_ordner
done
Die Anführungszeichen um $dateiname sind wichtig. Falls dateiname ein Leerzeichen enthält schützen die Anführungszeichen davor, das ein Dateinamen in mehrere Parameter aufgeteilt wird, was mit Sicherheit zu Fehlern bei der Ausführung führen wird.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

dfo231
Beiträge: 7
Registriert: 13.02.2016 21:09:05

Re: problem mit find und grep

Beitrag von dfo231 » 14.02.2016 16:00:06

Hallo heisenberg

Vielen dank für deine Hilfe.

Mein Ansatz war so total Falsch, aber so ist es wenn man am lernen ist,
aus Fehlern lernt man ja dazu.

Ich hab wohl zu viel gedacht.

Deine Lösung funktioniert nun und ich habe es in ein Script gepackt mit einer Ergänzung.

Code: Alles auswählen

grep -lr -i "suchwort" /suchverzeichnis | while read dateiname ; do
  mv "$dateiname" /zielverzeichnis
done
Der Parameter sorgt dafür das Groß- und Kleinschreibung nicht beachtet werden.
Nun werden die Log Dateien die wichtig sind direkt im Verzeichnis abgelegt und ich sehe
wenn Fehler auflaufen und kann mich schnell darum kümmern.

Vielen Danke

dfo231
Beiträge: 7
Registriert: 13.02.2016 21:09:05

Re: problem mit find und grep

Beitrag von dfo231 » 14.09.2016 12:35:30

Hallo Leute

Jetzt hat es sich so ergeben das ich nochmal Hilfe brauche,
ich möchte gerne wenn ich eine Dateien gefunden habe, das dann das Gesamte Verzeichnis
verschoben wird, mitgesamt des gesamten Inhaltes, aber nur das Verzeichnis das die Datei enthält.
Ich hab gerade gar keine Idee wie und wo ich ansetzen muss.

Wäre wieder über Hilfe hier sehr dankbar.

Benutzeravatar
heisenberg
Beiträge: 3555
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: problem mit find und grep

Beitrag von heisenberg » 14.09.2016 12:42:08

Die Bash-Funktion dirname zeigt Dir das Verzeichnis aus einem absoluten Dateinamen.

Code: Alles auswählen

dirname /path/to/file # -> "/path/to"
Jede Rohheit hat ihren Ursprung in einer Schwäche.

dfo231
Beiträge: 7
Registriert: 13.02.2016 21:09:05

Re: problem mit find und grep

Beitrag von dfo231 » 14.09.2016 16:39:50

z.b. dann sowas?

grep -lr -i "suchwort" /suchverzeichnis | while read dirname / ; do
mv "$dirname" /zielverzeichnis
done

Benutzeravatar
heisenberg
Beiträge: 3555
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: problem mit find und grep

Beitrag von heisenberg » 15.09.2016 17:11:35

Hallo dfo,

ich empfehle Dir, Dich mal etwas mit Shellscripting zu beschäftigen, um Dir die Grundlagen anzueignen.

http://openbook.rheinwerk-verlag.de/she ... ammierung/

Grüße,
h.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

dfo231
Beiträge: 7
Registriert: 13.02.2016 21:09:05

Re: problem mit find und grep

Beitrag von dfo231 » 15.09.2016 18:12:54

Hi

Danke für den Link, sowas hat gefehlt, ich muss mal so sagen, ich bin jetzt umgezogen und leider konnte ich 2 Monate gar nix mehr machen,
jetzt muss ich wieder eher am Anfang anfangen.

Danke für deine Hilfe.

Gruß Dennis

Antworten