PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suchen mit find



muellners
06.02.2005, 12:54
Hallo,

bin gerade dabei einen Skript zu schreiben, der mit dem Befehl "find -name" alle im System enthaltenen *.exe Dateien auswirft.

cd /home
find -name "*.exe" > Datei

ich möchte fast alle Verzeichnisse im Home-Ordner durchsuchen, aber eben nur fast alle!
Kann ich irgendwie einige Ordner z.B. root, bilder, sonstnocheinordner von der Suche ausschliessen ?

rup
06.02.2005, 13:16
Du kannst find alle Ordner angeben in denen du suchen willst.
find /home/hans /home/sepp /home/franz -name "*.exe"

Oder du kannst es mit dem Parametern -regex / -iregex versuchen, z.B. so:
find . -name "*.exe" -not -regex "^\./bilder/.*"

TenBaseT
06.02.2005, 16:29
Wenn nur wenige Verzeichnisse auszugeben sind, dann ist an Rip's Vorschlag sichrelich nichts auzusetzen. Alternative: alle *.exe suchen und Ergebnis in Datei abspeichern
*.awk datei erstellen, welche alle Ausschlüssen enthält
awk script anschmeißen, das alle Einträge mit nicht erwünschten Ordbern ins Nirvana jagd.


Hans

Phate
06.02.2005, 20:08
Oder hier mal nachlesen:
http://www.pro-linux.de/news/2002/4863.html
Gruß

dramen
06.02.2005, 21:19
probiers mal hiermit:

find /verzeichnis -name '*.exe' -maxdepth 1 -ok ls {} \; >> datei

oder einfach mal 'man find'

TenBaseT
06.02.2005, 21:41
find /verzeichnis -name '*.exe' -maxdepth 1 -ok ls {} \; >> dateiHuch, was soll denn das Gewürge? Ist doch das gleiche wie:
find /verzeichnis -name "*.exe" -maxdepth 1 -print > dateiDas mit dem -ok mag ja vereinzelt funktionieren, aber alles in einem Rutsch suchen und dann mal schnell den vi anwerfen ist wohl deutlich schneller. Ich vermisse in deinem Kommando eine Initialisierung von datei. Die wächst ja ins unermessliche wenn man die nicht zu Fuss löscht.


oder einfach mal 'man find'Stimmt auffallend :rtfm:

Hans

dramen
06.02.2005, 22:59
find /verzeichnis -name '*.exe' -maxdepth 1 -ok ls {} \; >> datei
find /verzeichnis -name "*.exe" -maxdepth 1 -print > datei
.... maaaaaaaaaa


Ich vermisse in deinem Kommando eine Initialisierung von datei. Die wächst ja ins unermessliche wenn man die nicht zu Fuss löscht.
was meinst du damit??

muellners
07.02.2005, 06:42
Hallo,

find . -name "*.exe" -not -regex "^\./bilder/.*"

ist genau das, was ich gesucht habe, danke !!!


nun noch eine Frage:

ist es auch möglich, die Größe der gefundenen Dateien zu ermitteln ?

rup
07.02.2005, 09:22
find . -name "*.exe" -not -regex "^\./bilder/.*" -exec ls -l {} \; | awk {'print $9 "\t" $5'}

Sieht dann etwa so aus
./hans/abc.exe 21132
./hans/def.exe 25820
./sepp/xyz.exe 10844

Schlaubi_fi.de
08.02.2005, 09:30
Hallo,

um Verzeichnisbäume bei der Suche auszulassen, kann auch -path und -prune benutzt werden.

Um die Dateigröße mit anzugeben, kann auch eine Verbindung aus -printf und %s benutzt werden.

rup
08.02.2005, 12:02
printf bei find kannte ich noch nicht, das ist natuerlich wesentlich besser/schneller als mein Konstrukt.

muellners
08.02.2005, 13:51
find . -name "*.exe" -not -regex "^\./bilder/.*" -exec ls -l {} \; | awk {'print $9 "\t" $5'}

liefert zwar das geswünschte Ergebnis, sobald aber ein Leerzeichen im Pfad vorhanden ist, sieht die Ausgabe folgendermaßen aus:

./hans/meine 25820

anstelle von:

./hans/meine dateien/unterordner/abc.exe 25820

ist da noch was anderes möglich?

muellners
09.02.2005, 01:11
Lösung gefunden:

find . \( -name "*.exe" -o -name "*.dat" \) -not -regex "^\./ordner1/.*" -not -regex "^\./ordner2/.*" -exec ls -sh {} \; > datei

Durchsucht das aktuelle Vezeichnis nach *.exe und *.dat Dateien, ordner1 und ordner2 werden von der Suche ausgenommen. Anschließend wird die Größe ermittelt und alles in eine datei umgeleitet.


Danke an alle für die Infos :)