FIND

Zoeken naar bestanden

We zijn allemaal wel eens op zoek naar een bepaald bestand op onze computer. --waar heb ik dat bestand nu ook weer opgeslagen--.

Als we de naam van het bestand nog weten dan kunnen we het programma find gebruiken om hiernaar te zoeken. De syntaxis is in dit geval heel gemakkelijk:

$find . -name nvim -print
Figuur 1. find . -name nvim -print
find . -name nvim -print
Laten we het commando even nader bekijken:
  • find : het commando
  • . : de lokatie vanwaar we willen gaan zoeken (in dit geval vanaf de huidige directory.
  • -name : vertel find dat we een bestand zoeken met de naam nvim
  • -print : "print voor alle gevonden bestanden hun locatie op het scherm.

In dit voorbeeld heb ik dus gezocht in mijn ~ (home) directory naar bestanden met de naam nvim (dit is NeoVim een editor gebaseerd op vi/vim).

Je kunt ook iname gebruiken i.p.v. name dit zal ervoor zorgen dat je "CaSe InseNSitiVe zoek" of niet hoofd/kleine-letter gevoelig.

Maar wat doen we als we de exacte naam van het bestand niet meer weten? Als we enkel het begin van de naam kennen dan kunnen we een wildcard gebruiken.

$find . -name 'ATmega48P*' -print
Figuur 2. find . -name 'ATmega48P*' -print
find . -name 'ATmega48P*' -print

find werkt met alle wildcards die de shell ondersteunt (dus ook ? en [].

Als het aantal resultaten te groot is, of je wil het zoeken beperken to bijv. maximaal 2 sub-directories dan kunnen we hiervoor de -maxdepth parameter gebruiken.
Figuur 3. find . -maxdepth 2 -name nvim -print
find . -maxdepth 2 -name nvim -print

De twee bestanden die in afbeelding 1 nog gevonden worden, worden nu niet meer weergegeven omdat ze "dieper" liggen dan de maximum van 2 sub-directories.

Als je de naam van het bestand niet weet of je wil zoeken op bepaade criteria dan kun je oa. de volgende gebruiken:

  • -mtime wanneer is het bestand gemaakt of het laatst aangepast
    1. find ~ -mtime -3 -print : Minder dan 3 dagen geleden
    2. find ~ -mtime 1 -print : Tussen de 24 en 48 uur
    3. find ~ -mtime +20 -print : Meer dan 20 dagen geleden
  • -size zoeken op grote van het bestand

Het is ook mogelijk om deze criteria te combineren, het zoekresultaat moet dan voldoen aan alle criteria de we opgeven. Bijvoorbeeld:

$find /home/patrick/Datasheets -mtime -5 -size +500k -print
Figuur 4. find /home/patrick/Datasheets -mtime -5 -size +500k -print
find /home/patrick/Datasheets -mtime -5 -size +500k -print

Het is ook mogelijk om bepaalde bewerkingen uit te voeren op de gevonden bestande. Hiervoor gebruiken we de -exec parameter én de hierbij horende {} en \; parameters.

Een commando kan er dan zo uit zien : $ find /home/patrick/Datasheets -mtime -5 -size +500k -exec rm {} \;
Figuur 5. find /home/patrick/Datasheets -mtime -5 -size +500k -exec rm {} \;
find /home/patrick/Datasheets -mtime -5 -size +500k -exec rm {} \;
We hebben nu net alle bestanden die aan onze zoekcriteria voldoen verwijdert van het systeem.

Meer informatie kun je altijd terugvinden in de manpages of de infopages