Bestanden vinden

ArticleCategory: [Choose a category for your article]

UNIX Basics

AuthorImage:[Here we need a little image form you]

[Guido Socher]

AuthorName:[Put your homepage or e-mail address here]

Guido Socher

AboutTheAuthor:[A small biography about the author]

Guido is gek op linux omdat het gratis is en het veel plezier geeft met anderen in de Linux gemeenschap over de hele wereld te werken. Zijn vrije tijd deelt hij met zijn vriendin, hij luistert veel naar de BBC World Service en houdt van fietsen in de natuur.

Abstract:[Here you write a little summary]

Dit artikel geeft een uitleg over het vinden van bestanden op bestandsnaam en op inhoud.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

Bestanden zoeken op bestandsnaam

Waarschijnlijk herken je het volgende probleem: je hebt een bestand ergens bewaard, maar je kan je niet herinneren waar.

Op dat moment biedt find uitkomst. Hoe werkt find? Het zoekprogramma komt met een uitgebreide man-pagina, maar laten we eens rustig beginnen met een paar "normale voorbeelden". Om recursief te zoeken in de directoryboom naar een bestand met de naam tezoekenbestand.txt typet u:

find . -name tezoekenbestand.txt -print

find accepteert ook jokers. Vergeet het dan niet tussen aanhalingstekens te zetten, omdat anders de shell de jokers probeert in te vullen. Hier is een voorbeeld:

find . -name "tezoeken*" -print

Als de directoryboom erg groot is, duurt het uitvoeren van het commando erg lang. Op dat moment kan locate mogelijk beter gebruikt worden: het doorzoekt niet echt de directoryboom, maar gebruikt een database. Hierdoor werkt het veel sneller, maar de database kan te oud zijn, zodat het bestand er niet in voorkomt. In sommige Linux distrubuties wordt de located database elke nacht bijgewerkt, maar je kan dit ook handmatig doen met het updatedb commando. locate kan ook zoeken op substrings.

locate tezoekenbestand.txt

Dit commando vindt alle bestanden met namen als tezoekenbestand.txt en ooktezoekenbestand.txt (tezoekenbestand.txt is hier een substring).

Tot nu toe hebben we gezocht naar bestanden waarvan we de naam volledig of bijna volledig kennen. Maar misschien was de bestandsnaam helemaal niet tezoekenbestand.txt, maar tezokenbestand.txt of zoekenbestand.txt. Ook als je de naam niet volledig kent, kan het dan ook gevonden worden? In dat geval kan je het programma ftff gebruiken, dat tijdens het zoeken rekening houdt met een aantal typefouten. Het commando zou de twee hierboven genoemde bestanden vinden met het commando:

ftff tezoekenbestand.txt

Het aantal fouten dat het programma accepteert, hangt af van de lengte van het bestandsnaam. Maar het kan ook ingestelt worden met de -t optie. Om twee typefouten toe te staan en bovendien een joker te gebruiken type je:

ftff -t2 "tezoeken*"

Het programma ftff is door mijzelf ontworpen en is onderdeel van het whichman-1.5 pakket dat hier overgehaald kan worden:

sunsite.unc.edu/pub/Linux/apps/doctools/

Soms wil je juist zoeken op alle bestanden die een bepaalde tekst niet hebben. Bijvoorbeeld om alle bestanden te laten zien, behalve die eindigen op .o en .c. Hieronder staan een paar manieren om dit te doen:

find . ! -name "*.o" ! -name "*.c" -print
find . -print | fgrep -v '.o' | fgrep -v '.c'
als u de GNU versie van find heeft: find | fgrep -v '.o' | fgrep -v '.c'
find | egrep -v '\.[oc]'

Een overzicht van het bestandssysteem maken

Ook wil je soms een overzicht hebben van de directorystructuur. Bijvoorbeeld om te zien wat er op die CD staat die je gister toegespeeld werd. Je kan dan ls -R gebruiken, maar persoonlijk heb ik de voorkeur voor de meer leesbare variant die tree ( sunsite.unc.edu/pub/Linux/utils/file/tree-1.2.tgz ) maakt.

tree
of met de directory: tree -fF

Maar het find commando biedt ook enkele andere mogelijkheden. De GNU versie van find die met bij de meeste Linux distributies zit, biedt ook de mogelijkheid om bijvoorbeeld de bestandsgrootte te geven:

find . -ls
find . -print of met GNU find: find
find . -printf "%7s %p\n"

Er is ook een klein Perl programma dat het resultaat van het ls commando kan aanpassen en soortgelijke resultaten te geven. Het kan programma lsperl.gz kan overgehaald worden. Natuurlijk zijn er nog veel meer programma's die dit soort dingen kunnen, maar met deze commando's kunt u genoeg doen.

Bestanden zoeken op inhoud

De standaard commando's voor het zoeken van tekstregels in bestanden zijn grep en egrep die reguliere expressies kunnen verwerken en fgrep die zoekt op letterlijke teksten. Om een expressie (tekst of reguliere expressie van teksten) te zoeken in alle files in de huidige directory:

egrep -i "expressie" *

Om te zoeken naar een tekst in alle bestanden in de huidige directoryboom kunt u het find en het grep commando combineren. Dit kan op verschillende manieren gebeuren:

egrep -i "expressie" `find . -type f -print`
find . -type f -exec egrep -i "expressie" /dev/null {} \;
find . -type f -print | xargs egrep -i "expressie"

Als u het moeilijk vindt deze commando's te onthouden, kunt u een klein shell script (grepfind.gz) overhalen. Het script voorkomt bovendien dat zogenaamde non-printable karakters verwijdert worden, als egrep binaire bestanden tegenkomt. (Deze binaire karakters worden in ASCII meestal gezien als exotische tekens of als commando's waardoor beepjes uit de luidspreker komen en de schermopbouw van het shell ernstig verstoord wordt.)

Een interessant programma is agrep dat in principe hetzelfde werkt als egrep maar voor typefouten corrigeert. Om te zoeken naar een tekst waar twee type- of spellingsfouten in mogen zitten, typet u:

agrep -i -2 "zoek exprissie" *

Het agrep kan overgehaald worden bij sunsite: sunsite.unc.edu/pub/Linux/utils/text/agrep-2.04.tar.Z of van de originele site: ftp://ftp.cs.arizona.edu/agrep/

En dan is er ook nogglimpse. Dit programma is een zeer krachtig zoekprogramma. Het werkt op dezelfde manier als locate. Eerst bouwt het een database dat lang duurt, maar het zoeken gebeurd daarna erg snel. Om een zoekindex te maken voor de inhoud van alle bestanden in de huidige directory en alle daaronder:

glimpseindex .

Hierna kan je zoeken naar een string in alle bestanden die met het vorige commando geïndexeerd zijn

glimpse -i -2 "zoekexpressie"

Net zoals agrep is glimpse tolerant voor typefouten. De -2 optie in het vorige voorbeeld geeft aan dat er twee typefouten gemaakt mogen worden. Het programma kan overgehaald worden van http://glimpse.cs.arizona.edu/.


Er zijn veel zoekprogramma's beschikbaar voor Unix en voor Linux in het bijzonder. Dit artikel is verre van compleet. Als u geïnteresseerd bent in meer truckjes en programma's, kijk dan eens naar de .lsm bestanden op There are many search utilities available for Unix and Linux especially. This article can be by no means complete. If you are interested in more tricks and utilities like this then have a look at the .lsm files under http://sunsite.unc.edu/pub/Linux/utils

Veel plezier en een goede jacht op vermiste bestanden!

mirror server hosted at Truenetwork, Russian Federation.