Gibt es eine schnelle Suchfunktion für Dateien?

Message
Author
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 .

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

#36 Post by der-schutzhund »

Ein Verzeichnis von Hand zu erzeugen hatte ich natürlich auch schon getestet aber das funktioniert dann auch noch nicht!

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

#37 Post by Karl Godt »

Tja, werde mal dann eine lupu booten muessen .

Einzigst witheout-Flagg-Schnipsel oder Berechtigungen fielen mir dazu auf_anhieb ein .

Code: Select all

find /initrd/pup_rw -name "*.wh.*"
find /initrd/pup_ro1-name "*.wh.*"
whoami
find /usr -type d -name "var" -exec ls -lR {} \; | grep -i 'locate'
ls -lR /var | grep -i 'locate'
grep -nHi 'locate' /etc/group /etc/gshadow
Und vielleicht um updatedb zu ueberlisten , einen leeren Ruehr-Futzel creieren :

Code: Select all

touch /usr/var/mlocate/mlocate.db
Jedenfalls ein kurzer Test durch

Code: Select all

mv -i /usr/var/mlocate/mlocate.db /usr/var/mlocate/mlocate.db-old
und ein updatedb meckerte nicht ueber einen fehlenden Database-Brocken .

Wenn ich allse wuesste, waere ich in Hollywood und nicht hier . Am besten ist immer der direkte Zugang bei Trubel .

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

#38 Post by Karl Godt »

So, hab jetzt ein Lupu-511 Derivat hochgeschossen , das Haupt- .pet von hier kopiert (heruntergeladen) , darauf links-geklickt und akzeptiert, es zu installieren :

Code: Select all

# locate geany
locate: can not stat () `/usr/var/mlocate/mlocate.db': No such file or directory

# mkdir -p /usr/var/mlocate
# locate geany
locate: can not stat () `/usr/var/mlocate/mlocate.db': No such file or directory

# touch /usr/var/mlocate/mlocate.db
# locate geany
locate: unexpected EOF reading `/usr/var/mlocate/mlocate.db'

# echo "" >/usr/var/mlocate/mlocate.db
# locate geany
locate: unexpected EOF reading `/usr/var/mlocate/mlocate.db'

# echo -e "\n" >/usr/var/mlocate/mlocate.db
# locate geany
locate: unexpected EOF reading `/usr/var/mlocate/mlocate.db'

# echo -e "Dummy\n" >/usr/var/mlocate/mlocate.db
# locate geany
locate: unexpected EOF reading `/usr/var/mlocate/mlocate.db'

# updatedb
updatedb: can not find group `mlocate'

# addgroup -S -g 9876 mlocate
# updatedb

# locate geany
/initrd/mnt/dev_save/Pet.D/tmp/langpack_de-20130204/usr/share/doc/nls/geany
/initrd/mnt/dev_save/Pet.D/tmp/langpack_de-20130204/usr/share/doc/nls/geany/geany.pot
[ .. ]

Gruppe 9876 is (natuerlich) Ermessenssache ; hatte kurz im Inter-Netz recherchiert, ob es bei den grossen Distros irgend einen stillschewigenden Usus ueber eine allgemein distro-uebergreifende Gruppen-ID-Nummer gaebe, und nichts gefunden - auch in dem regulaeren .deb aus der Debian-Squeeze-Repo nicht .
apt-get scheint dies ueber einen zentralen Konfigurations-Mechanismus zu bewerkstelligen . Ich habe nur Puppy-Linux, und kann darum nicht sagen, wie andere GNU/Linux Operations-Systeme diese Gruppen-ID handhaben .
changelog.Debian wrote:mlocate (0.18-1) experimental; urgency=low

* Initial release. (Closes: #435787)

* Create a "mlocate" group, and make the locate binary setgid on postinst
(with dpkg-statoverride).
README wrote:new releases will be available at https://fedorahosted.org/mlocate/ .

Installation
============
Before installation it is necessary to create a group called "mlocate" to allow
hiding the contents of the database from users.

When updatedb is run by root, the database contains names of files of all
users, but only members of the "mlocate" group may access it. "locate" is
installed set-GID "mlocate", no other program should need to run with this GID.
Was GID und SID anbelangt, muesste ich mich mal weiterbilden ..

HDH soweit erstmal .

Gruss, Karl

Post Reply