Suchen mit find

muellners

muellners

Jungspund
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 ?
 
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/.*"
 
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
 
probiers mal hiermit:

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

oder einfach mal 'man find'
 
dramen schrieb:
find /verzeichnis -name '*.exe' -maxdepth 1 -ok ls {} \; >> datei
Huch, was soll denn das Gewürge? Ist doch das gleiche wie:
Code:
find /verzeichnis -name "*.exe" -maxdepth 1 -print > datei
Das 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.

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

Hans
 
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??
 
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 ?
 
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
 
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.
 
printf bei find kannte ich noch nicht, das ist natuerlich wesentlich besser/schneller als mein Konstrukt.
 
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?
 
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 :)
 

Ähnliche Themen

find Ausgabe in "Anführungszeichen"

verzeichniss suche funktioniert nicht

Shell Skript zum automatischen Aufräumen von doppelten Ordnern

Nach nicht existierender Datei suchen

Hilfe bei backup-script

Zurück
Oben