lu.se

Datavetenskap

Lunds Tekniska Högskola

Denna sida på svenska This page in English

Hitta saker på datorn

2010-03-31

Det finns ett antal sätt att finna saker på sin dator, beroende på om man söker på:
– filnamn
– filinnehåll

Jag skall skriva om följande tekniker:

TeknikFilnamnFilinnehåll
Spotlight /mdfindJaJa
locateJa
grepJa (fast endast textinnehåll)
findJa

Alla dessa tekniker kan köras från terminalen (de i rött) om man vill men endast Spotlight kan göras grafiskt.

1:  Spotlight

Apples sökteknik som bygger på att alla filer indexeras när de skrivs.
+ Mycket snabb
+ Söker även i filers innehåll (stödjer de flesta vanliga filformat)
+ Tillgänglig även i Öppna/Spara-dialogrutor
+ Tillåter boolska sökningar
- Indexerar inte riktigt allt (undantaget är: alla kataloger/filer som inte är synliga i Findern samt System-katalogen)

Man tar bort kataloger som inte skall vara sökbara via Äpplemenyn → Systeminställningar → Spotlight → Integritetsskydd.

Vill man lägga till kataloger som inte redan finns med gör man det via terminalen:
mdimport katalog

Att göra en Spotlightsökning via terminalen har följande syntax:
mdfind det_man_söker

Optioner är:
-onlyin katalog söker i ”katalog” man då specificerar
-name namn_på_fil söker enbart efter filnamn (alltså inte innehåll)

Vill man ta bort ett index och ”börja om” gör man det med:
mdutil -E / (om det är boot-driven man vill bygga om indexet för)

Vill man att en skiva inte skall indexeras kan man antingen göra detta i Integritetsskydd som ovan eller via mdutil:
mdutil -i off /Volumes/skiva

Apple indexerar de flesta typer av filer men en lista över pluginer man kan ladda hem finns här: http://www.apple.com/downloads/macosx/spotlight/ eller http://mac.softpedia.com/get/Spotlight-Plugins---Utilities/. De pluginer som ingår i systemet ligger i /System/Library/Spotlight.

Med Spotlight kan man även göra boolska sökningar och även söka på metadata. På adressen http://docs.info.apple.com/article.html?path=Mac/10.6/en/15155.html och http://docs.info.apple.com/article.html?path=Mac/10.6/en/cdb_sptknd.html kan man läsa mera utförligt om detta, men här några belysande i korthet:

author:tom OR author:thomSöker efter en fil vars author är tom eller thom
resa -frankrikeSöker efter dokument som innehåller ”resa” men tar bort sådana som även innehåller ”frankrike”
kind:message date:2008-06-29-2008-07-25 NOT date:2008-07-14Söker efter e-brev skrivna mellan 2008-06-29 och 2008-07-25, men exkluderar sådana skrivna 2008-07-14
trip kind:documentSöker efter order ”trip” i dokument
möte date:tomorrowSöker efter planerade möten i morgon
kind:music by:shpongleSöker efter musik av Shpongle
kind:applicationkind:applicationskind:appProgram
kind:folderMapp
kind:emailkind:emailskind:mailmessagekind:mail messagesE-brev
kind:imagekind:imagesBilder
kind:moviekind:moviesFilm
kind:musicMusik
kind:pdfkind:pdfsPDF-dokument
kind:bookmarkkind:bookmarksBokmärke
kind:audioAudio

2:  locate — hitta filnamn

Detta är ett mycket användbart Terminal-kommando som söker efter filnamn i en databas (/var/db/locate.database, 10-20 MB stor) över filnamn. Denna lista genereras automatiskt en gång i veckan. Behöver man kan man dock bygga om den själv. I och med att det är en färdig lista sker sökningen blixtsnabbt och det är det som gör kommandot så trevligt!

Apple ändrade hur locate fungerar i Mac OS X 10.6 ”Snow Leopard” så att detta index inte byggs utan man får själv sätta på att det skall byggas (sedan byggs det själv, men man måste alltså tala om att det skall byggas). Denna flagga sätter man med kommandot:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

Man bygger om databasen manuellt med:
sudo /usr/libexec/locate.updatedb (tar några minuter)

Den enda användbara optionen till locate är -i som gör sökningen inte bryr sig om versala/gemena tecken.

3: grep — hitta innehåll i filer

Gamla hederliga UNIX-kommandot grep finns ännu. Förslagsvis söker man rekursivt:
grep -r söksträng *

Lägg på -i för att ignorera versala/gemena tecken.

Tänk på att grep bara tittar i filer med 8-bitars kodning! Det börjar dyka upp filer kodade i UTF-16 och det hittar inte grep!!!

4:  find — hitta filnamn

Gamla UNIX-kommandot find finns för den som vill och går naturligtvis att använda men locate är, enligt mig, bättre på alla sätt.