Gibt es eine schnelle Suchfunktion für Dateien?

Message
Author
User avatar
Karl Godt
Posts: 4199
Joined: Sun 20 Jun 2010, 13:52
Location: Kiel,Germany

#16 Post by Karl Godt »

Weiss ich jetzt nicht .. Meine find.db.text ist

bash-3.00# wc -l find.db.text
403818 find.db.text

~400.000 Zeilen lang ..

bash-3.00# ls -s --block-size=K find.db.text
21352K find.db.text
bash-3.00# ls -s --block-size=M find.db.text
21M find.db.text

*
Das hier ist nun mlocate :
http://packages.debian.org/source/sid/mlocate
Kompilliert gut auf meiner Puppy-4 , einfach

Code: Select all

./configure ; make ; new2dir make install ; addgroup -S -g 2120 mlocate ; updatedb ; locate -i -e "*locate*"
in der Sossen-Kanne .. sehr sehr fix !

Bierher-Dateien sind aber benannt " locate " und " updatedb " und nicht " mlocate " und " mupdatedb " -- also aufgepasst , solte etwas (nicht) ueberschrieben werden .

ls -s --block-size=M /usr/local/var/mlocate/mlocate.db
8M /usr/local/var/mlocate/mlocate.db

User avatar
Karl Godt
Posts: 4199
Joined: Sun 20 Jun 2010, 13:52
Location: Kiel,Germany

#17 Post by Karl Godt »

Man kann die DateienBasis .db. Datei auch komprimieren :

Code: Select all

cp find.db.text find.db.text.compressed
bzip2 find.db.text.compressed
ls -s --block-size=M find.db.text.compressed.bz2
ist dann nur
2M find.db.text.compressed.bz2
anstatt von 21M = 10% !

time grep "geany" find.db.text
dauert bei mir
real 0m2.669s
user 0m2.453s
sys 0m0.023s

und
time bzcat find.db.text.compressed.bz2 | grep -i "geany"
real 0m3.851s
user 0m3.660s
sys 0m0.057s

also nur bash-3.00# echo $((3851*100/2669))
144 -> 44% langsamer

Aber
time locate -i "geany"
real 0m0.739s
user 0m0.680s
sys 0m0.013s

bash-3.00# echo $((739*100/2669))
27 -> 73% schneller

schlaegt grep ganz schoen in einer Welt, in der die Almdudler-Abfahrt im 1000stel Sekunden Bruchteil gewonnen wird .

http://packages.debian.org/sid/doodle
braucht lieb-extractor und die ist mir mit 7-8MB fuer heute zuviel bei meiner Bandbreiten-SchnappsDrosselung : GRINS :

User avatar
Bert
Posts: 1103
Joined: Fri 30 Jun 2006, 20:09

#18 Post by Bert »

Hallo,

Es gibt auch Bulldog Finder 3.4 durch Don570.

Klein (11.47KB Pet) und schnell.
Vielleicht ist das auch eine Möglichkeit?
[url=http://pupsearch.weebly.com/][img]http://pupsearch.weebly.com/uploads/7/4/6/4/7464374/125791.gif[/img][/url]
[url=https://startpage.com/do/search?q=host%3Awww.murga-linux.com%2F][img]http://i.imgur.com/XJ9Tqc7.png[/img][/url]

User avatar
chef
Posts: 76
Joined: Tue 18 Jun 2013, 15:17
Contact:

#19 Post by chef »

Hai Bert, den Bulldogfinder schaue ich mir an, aber gerade lässt mich ein Gedanke nicht los.

Also, ich habe den Ansatz nochmal geändert. Jetzt wird die Datenbank erstellt, während der User noch eingibt. Die Zeit reicht, glaube ich. damit hätte man dann auch immer aktuelle Dateilisten.
#!/bin/sh
cd /root/suchen
find / -iname '*' > find.db &

GTKDIALOG=gtkdialog
export MAIN_DIALOG='
<window title="Suchwort eingeben" resizable="false">
<frame suche nach>
<vbox>
<hbox>
<text><label> .</label></text>
<entry><variable>willi</variable></entry>
</hbox>
<hbox>
<button></button>
</hbox>
</vbox>
</frame>
</window>
'
gtkdialog -p MAIN_DIALOG
Bis jetzt alles nur ein Ansatz, aber vielversprechend?

der-schutzhund
Posts: 1045
Joined: Mon 26 Nov 2007, 22:07
Location: Blomberg / Germany

#20 Post by der-schutzhund »

Hallo zusammen,

habe eben mal mit "Suche Everything" unter XP meine Festplatte gescannt.
Die Festplatte im Notebook ist ca. 180GB groß und ca. 15GB sind noch frei. Es sind drei NTFS-Partitionen eingerichtet die beim Start von "Suche Everything" einmal in eine Datenbank gescannt werden.
Das dauert 30 Sek.
Danach können Teile des Dateinamens in ein Suchfeld eingegeben werden und die Anzeige der Ergebnisse erfolgt dann in Echtzeit!

Bulldogfinder habe ich getestet. Ist nicht viel schneller als PFind!

Der springende Punkt ist, dass nicht die Verzeichnisse der Reihe nach Dateien durchsucht werden sondern eben der Master File Table (MTF) der Festplatte!
Das dann in eine eigene Datenbank und fertig.

Hier gibt es ja auch schon ein paar tolle Ansätze! Bin mir fast sicher, dass am Ende eine schnellere Suchfunktion steht als dies mit PFind möglich ist.

LG

Wolfgang

User avatar
chef
Posts: 76
Joined: Tue 18 Jun 2013, 15:17
Contact:

#21 Post by chef »

Also ich habe noch mal einen Ansatz mit Gambas gemacht. Das ganze basiert immer noch auf find, aber dieses mal wieder ohne eine Datenbank zu machen.

Ich habe mir den Quellcode von pfind mal angesehen. Sie verlieren viel Zeit mit dem zwischenspeichern der Dateien und GTK frisst wohl auch noch mal ein wenig davon.
Aber das geht wohl nicht anders, wenn man Shell-Script nutzt.

Man könnte die gesamte Suchfunktion in Variablen (statt in Textdateien) legen.
Aber viel schneller wird das nicht mehr.

Aber das offizielle Interesse daran ist vorbei oder?

Für die gambas Datei braucht man wieder die gambas3-runtime.
Attachments
suchdas.tar.gz
Ansatz für eine Suchfunktion mit Gambas. Taugt das was?

Die gambas3-runtime muß installiert sein.
(1.77 KiB) Downloaded 291 times

der-schutzhund
Posts: 1045
Joined: Mon 26 Nov 2007, 22:07
Location: Blomberg / Germany

#22 Post by der-schutzhund »

Weiß jemand wie man die Dateinamen aus dem Master File Table (MTF) lesen kann?

Hinweis:
An Stelle von Gambas würde ich grundsätzlich PureBasic verwenden!
Die erzeugten Programme sind auch wirkliche Programme und benötigen keine Laufzeitumgebung. Sie sind schneller und unter dem Strick viel kleiner!

User avatar
RSH
Posts: 2397
Joined: Mon 05 Sep 2011, 14:21
Location: Germany

#23 Post by RSH »

Hai, also ich habe hier 1TB Festplatte die zur Hälfte voll ist und die Suche ist genauso schnell. Vielleicht liegt es ja an was anderem?
Na ja, ich denke meine Angabe war ein wenig ungenau, da Plattenkapazität und verbleibender freier Speicher für sich alleine genommen eher wenig Aussagekraft haben.

Es kommt maßgeblich darauf an, aus wieviel Dateien der belegte Speicherplatz besteht.

Ich habe hier: 858 G (1.345.703 Dateien, 156.406 Ordner).

Was hast Du?

RSH
[b][url=http://lazy-puppy.weebly.com]LazY Puppy[/url][/b]
[b][url=http://rshs-dna.weebly.com]RSH's DNA[/url][/b]
[url=http://murga-linux.com/puppy/viewtopic.php?t=91422][b]SARA B.[/b][/url]

User avatar
chef
Posts: 76
Joined: Tue 18 Jun 2013, 15:17
Contact:

#24 Post by chef »

So, hier habe ich mal zusammengesucht was ich weiß. Allerdings weiß ich garnicht, wie man die Anzahl der Ordner ermittelt.

Also die Suche mit:

Code: Select all

find /mnt/sdb1/ -iname '*'
ergab:

Code: Select all

Dateienanzahl: 74330
Die Suche dauerte:

Code: Select all

real	0m7.302s
user	0m0.753s
sys	0m1.473s
Mit Gparted habe ich das hier bekommen:

Code: Select all

Festplattengröße: 931,5 GB
Benutzt: 472.43 GB
Unbenutzt: 459.08 GB
Dateisystem: ntfs
Das sind natürlich heftige Unterschiede. Hast du recht. Ich habe mich da wohl ein wenig hinreißen lassen. :oops:

Ja, damit bin ich raus, dann habe ich keine Ahnung.

___________________________________________


Das Purebasic hatte ich damals mal probiert, aber ich kam schwer damit zurecht. Es gabe viele undurchsichtige Meldungen. Das lag vielleicht daran, dass es eine Demoversion war? Oder das ich keinen Schimmer habe. Ich kenne Basic auch kaum bis garnicht.
Irgendwas war auch mit dem Purebasic Forum. Alles zusammen, habe ich dann alles in der Richtung verworfen.

Mit Gambas wurde vieles einfacher. Ich bin immer noch ein Anfänger und froh, dass die Dinge immer besser laufen. Die Hilfe ist fantastisch und verständlich.

Na ja, und letztlich werde ich kaum die Programme verkaufen oder irgendwie weitergeben. Ich wünschte mir nur mal, dass einer die Sachen mal testet. Damit ich hier mal über meinen Tellerrand gucken kann.

antilet
Posts: 213
Joined: Fri 17 Aug 2012, 09:24

#25 Post by antilet »

der-schutzhund wrote:Weiß jemand wie man die Dateinamen aus dem Master File Table (MTF) lesen kann?
Ich meine den gibt es so gar nicht in Linux. In den Inodes stehen zwar einige Dateieigenschaften, aber nicht der Dateiname. Da eine Datei via Hardlink auch mehrere verschiedene Namen haben kann...
[color=blue][size=75]Toshiba Satallite M30X-124 | ATI Mobility Radeon 9700 | Intel PRO/Wireless 2200BG
Most Linux need special boot options to boot on this laptop: i8042.nomux=1 highres=off nohz=off irqpoll[/size][/color]

der-schutzhund
Posts: 1045
Joined: Mon 26 Nov 2007, 22:07
Location: Blomberg / Germany

#26 Post by der-schutzhund »

antilet wrote:
der-schutzhund wrote:Weiß jemand wie man die Dateinamen aus dem Master File Table (MTF) lesen kann?
Ich meine den gibt es so gar nicht in Linux. In den Inodes stehen zwar einige Dateieigenschaften, aber nicht der Dateiname. Da eine Datei via Hardlink auch mehrere verschiedene Namen haben kann...
Der Master File Table ist der Speicherbereich auf einer NTFS-Partition in dem alle Infos der Dateien stehen. Die stehen da, egal ob man aus Windows oder Linux oder sonst einem Betriebssystem darauf zu greift!

der-schutzhund
Posts: 1045
Joined: Mon 26 Nov 2007, 22:07
Location: Blomberg / Germany

#27 Post by der-schutzhund »

Karl Godt wrote:Weiss ich jetzt nicht .. Meine find.db.text ist

bash-3.00# wc -l find.db.text
403818 find.db.text

~400.000 Zeilen lang ..

bash-3.00# ls -s --block-size=K find.db.text
21352K find.db.text
bash-3.00# ls -s --block-size=M find.db.text
21M find.db.text

*
Das hier ist nun mlocate :
http://packages.debian.org/source/sid/mlocate
Kompilliert gut auf meiner Puppy-4 , einfach

Code: Select all

./configure ; make ; new2dir make install ; addgroup -S -g 2120 mlocate ; updatedb ; locate -i -e "*locate*"
in der Sossen-Kanne .. sehr sehr fix !

Bierher-Dateien sind aber benannt " locate " und " updatedb " und nicht " mlocate " und " mupdatedb " -- also aufgepasst , solte etwas (nicht) ueberschrieben werden .

ls -s --block-size=M /usr/local/var/mlocate/mlocate.db
8M /usr/local/var/mlocate/mlocate.db
Bekomme es nicht kompiliert!
Kannst du mal das pet hochladen ... bitte?

LG

Wolfgang

antilet
Posts: 213
Joined: Fri 17 Aug 2012, 09:24

#28 Post by antilet »

der-schutzhund wrote: Der Master File Table ist der Speicherbereich auf einer NTFS-Partition in dem alle Infos der Dateien stehen. Die stehen da, egal ob man aus Windows oder Linux oder sonst einem Betriebssystem darauf zu greift!
Hattest du das irgendwo geschrieben, dass du auf einer NTFS-Partition suchen willst, dann habe ich es überlesen - bei Linux gehe ich zumindest von ext aus...
[color=blue][size=75]Toshiba Satallite M30X-124 | ATI Mobility Radeon 9700 | Intel PRO/Wireless 2200BG
Most Linux need special boot options to boot on this laptop: i8042.nomux=1 highres=off nohz=off irqpoll[/size][/color]

der-schutzhund
Posts: 1045
Joined: Mon 26 Nov 2007, 22:07
Location: Blomberg / Germany

#29 Post by der-schutzhund »

Hattest du das irgendwo geschrieben, dass du auf einer NTFS-Partition suchen willst, dann habe ich es überlesen - bei Linux gehe ich zumindest von ext aus...
Ja, ein paar Beiträge weiter oben!

antilet
Posts: 213
Joined: Fri 17 Aug 2012, 09:24

#30 Post by antilet »

der-schutzhund wrote:Ja, ein paar Beiträge weiter oben!
Hm, vielleicht habe ich Tomaten auf den Augen, ich sehe nicht wo du geschrieben hast, dass du unter NTFS suchen willst. Du hast allerdings viele Vergleiche zu NTFS gezogen. Ich war davon ausgegangen, dass du etwas vergelichbares wie du für Win hast nun auch für Linux suchst.
Wie dem auch sei. Ich glaube nicht, dass es für Linux ein Suchtool gibt, dass auf das Suchen in NTFS-Verzeichnissen spezialisert ist.
Cached (p)find Informationen? Wenn ja wo?
der-schutzhund wrote:Bekomme es nicht kompiliert!
Kann man es nicht aus den deb-Repository laden und dann mit deb2pet in ein pet oder sfs konvertieren?
[color=blue][size=75]Toshiba Satallite M30X-124 | ATI Mobility Radeon 9700 | Intel PRO/Wireless 2200BG
Most Linux need special boot options to boot on this laptop: i8042.nomux=1 highres=off nohz=off irqpoll[/size][/color]

User avatar
Karl Godt
Posts: 4199
Joined: Sun 20 Jun 2010, 13:52
Location: Kiel,Germany

#31 Post by Karl Godt »

Kannst du mal das pet hochladen ... bitte?
Attachments
mlocate-0.26-i486.pet
(42.06 KiB) Downloaded 346 times
mlocate_NLS-0.26-i486.pet
(55.2 KiB) Downloaded 351 times
mlocate_DOC-0.26-i486.pet
(6.05 KiB) Downloaded 343 times

User avatar
L18L
Posts: 3479
Joined: Sat 19 Jun 2010, 18:56
Location: www.eussenheim.de/

mlocate

#32 Post by L18L »

Code: Select all

# time updatedb

real	0m3.294s
user	0m0.407s
sys	0m1.187s
# 
# time locate bark
/initrd/pup_ro2/usr/share/audio/2barks.au
/initrd/pup_ro2/usr/share/audio/2barks.wav
/initrd/pup_ro2/usr/share/audio/bark.au
/initrd/pup_ro2/usr/share/sounds/2barks.au
/initrd/pup_ro2/usr/share/sounds/bark.au
/usr/share/audio/2barks.au
/usr/share/audio/2barks.wav
/usr/share/audio/bark.au
/usr/share/sounds/2barks.au
/usr/share/sounds/bark.au

real	0m1.258s
user	0m0.863s
sys	0m0.023s
#
Sehr gut; Karl. 8)

Edit
Zum Vergleich:

Code: Select all

# time find / -name *bark*
/usr/share/audio/2barks.au
/usr/share/audio/2barks.wav
/usr/share/audio/bark.au
/usr/share/sounds/2barks.au
/usr/share/sounds/bark.au
/initrd/pup_ro2/usr/share/audio/2barks.au
/initrd/pup_ro2/usr/share/audio/2barks.wav
/initrd/pup_ro2/usr/share/audio/bark.au
/initrd/pup_ro2/usr/share/sounds/2barks.au
/initrd/pup_ro2/usr/share/sounds/bark.au

real	0m5.088s
user	0m1.020s
sys	0m1.300s
#

der-schutzhund
Posts: 1045
Joined: Mon 26 Nov 2007, 22:07
Location: Blomberg / Germany

#33 Post by der-schutzhund »

@Karl
War mal etwas weg.
Habe gerade die 3 pets geladen und folgendes getestet:

time find / >find.db.text
dauert ca. 4 Minuten. Die Datenbank ist ca. 52 MB groß

time find / -name *geany*
dauert bei mir ca. 16 sek.

Wenn ich das richtig verstehe sind das aber die ganz normalen Suchbefehle und haben nichts mit deinen Pets zu tun?

Wie wären denn nochmal die Befehle:

- zum erzeugen der Datenbank
- Update dieser Datenbank falls es diese Funktion gibt
- Suchfunktion in der Datenbank?

der-schutzhund
Posts: 1045
Joined: Mon 26 Nov 2007, 22:07
Location: Blomberg / Germany

#34 Post by der-schutzhund »

Wenn ich es richtig sehe dann wird mit /usr/bin/updatedb die Datenbank erzeugt?
updatedb meldet, dass die Datei /usr/var/mlocate/mlocate.db nicht gefunden wird.
/usr/var gibt es bei mir auch nicht als Verzeichnis.
[/code]

User avatar
Karl Godt
Posts: 4199
Joined: Sun 20 Jun 2010, 13:52
Location: Kiel,Germany

#35 Post by Karl Godt »

Oh, Hallo Wolfgang !

Yup , hast recht , dass einfach --prefix=/usr auch in der Regel /usr/var in Hinsicht der --localestatedir bedeuted . Und in dem Haupt .pet ist der Ordner /usr/var nicht enthalten gewesen , oder gar ein Link nach /var .

Um einen Ordner anzulegen , kann man den Filemanager nutzen oder den Terminal :

Code: Select all

mkdir -p /usr/var/mlocate
oder als link

Code: Select all

ln -s /var /usr/var
War auch weg und habe jetzt erst gemerkt, dass Du geantworted hast .
Hmm, es scheint bei den ca. dreissig downloads selbststaendigere oder erfahrenere Leute dabei gewesen zu sein, oder die sind in Repositorien gelandet und nicht auch noch installiert worden .

Lutz18L jedenfalls scheint Probleme selbst geloest zu haben , oder seine Installation kommt standardmaessig mit /usr/var undoder /usr/local/var .

Post Reply