logo

Vind Commando in Linux/Unix met voorbeelden

De opdracht find helpt ons een bepaald bestand in een map te vinden. Het wordt gebruikt om de lijst met bestanden te vinden voor de verschillende voorwaarden, zoals toestemming, gebruikerseigendom, wijziging, datum/tijd, grootte en meer.

In Unix-achtige en andere besturingssystemen is de opdracht find een opdrachtregelhulpprogramma dat bestanden vindt op basis van een paar door de gebruiker opgegeven formaten en de padnaam van alle overeenkomende objecten afdrukt of, als andere acties worden gevraagd, die actie implementeert op alle overeenkomende objecten.

Het begint een zoekopdracht vanaf een gewenste startlocatie en doorkruist daarna recursief de mappen (knooppunten) van een hiërarchische structuur (meestal een boom). De opdracht find kan verschillende bestandspartitiesystemen zoeken en doorlopen die tot een of meer opslagapparaten onder de startmap behoren.

Het zoekformaat bevat een patroon voor vergelijking met de bestandsnaam of het tijdsbereik voor vergelijking met de wijzigingstijd of de toegangstijd tot het bestand. De opdracht find biedt standaard een lijst van elk bestand in de huidige werkmap. Gebruikers kunnen de zoekopdracht echter beperken tot een gewenst maximumniveau in de startmap.

De bijbehorende locatieprogramma's passen een geïndexeerde bestandsdatabase toe die is verkregen via de opdracht fine om een ​​snellere techniek te bieden voor het doorzoeken van het hele bestandssysteem op naam.

Het zoekhulpprogramma wordt standaard meegeleverd met de meeste Linux-distributies , dus we hoeven geen extra pakket te installeren. Het is een van de meest essentiële en gebruikte commando's van de Linux systeem.

 find 

De twee opties bepalen hoe find rekening moet houden met symbolische koppelingen. Het standaardkarakter is nooit het nastreven van symbolische verbanden. De vlag, d.w.z. -L , zal leiden tot het nastreven van symbolische verbanden. De vlag, d.w.z. -H , zal alleen symbolische koppelingen nastreven terwijl hij doorgaat met de argumenten op de opdrachtregel. De vlaggen worden vermeld in de POSIX-standaard voor het find-commando. Een basisextensie is een vlag, dat wil zeggen: -P , om de volgende symlink expliciet uit te schakelen.

Er moet tenminste een pad anticiperen op de uitdrukking. Het find-commando kan intern jokertekens interpreteren, en commando's moeten zorgvuldig tussen aanhalingstekens worden geplaatst om shell-globbing te beheren.

Expressiecomponenten worden geïsoleerd door de argumentgrens van de opdrachtregel, doorgaans aangegeven als witruimte binnen de shell-syntaxis. Ze worden van links naar rechts bekeken. Ze kunnen logische componenten bevatten zoals OR en AND, maar ook predikaten (acties en filters). GNU find bevat verschillende andere functies die niet door POSIX worden genoemd.

De volgende symbolen worden gebruikt om de directory op te geven:

(.) : Voor de huidige mapnaam

(/) : Voor de hoofdmap

Korte geschiedenis van het zoekcommando

Het find-commando kwam voor in versie 5 Unix als een element van de Programmeurswerkbank project en werd gespecificeerd door Dick Haight met cpio, die zijn ontwikkeld om samen te worden gebruikt.

Oorspronkelijk werd de GNU-implementatie van het find-commando gespecificeerd door Erik Dekker . Later werd het ontwikkeld door David MacKenzie, Tim Wood , En Jay Plet . Bovendien is de find-opdracht geporteerd naar het IBM i OS.

jQuery bij klikken

Predikaten

Veelgebruikte primaire kleuren zijn:

    -naam patroon:Het controleert of de bestandsnaam hetzelfde is als het gegeven shell-glob-patroon of niet.-type type:Er wordt gecontroleerd of het bestand van het opgegeven type is.-afdrukken:Het geeft altijd de echte waarde. Het drukt de huidige bestandsnaam en een nieuwe regel af naar stdout.-print0:Het geeft altijd de echte waarde. Het drukt de huidige bestandsnaam en een nulteken af ​​naar stdout. Niet nodig voor POSIX.-exec-programma [argument ...];:Het geeft altijd de echte waarde. Het voert een programma uit met de vaste gegeven argumenten en het huidige bestandspad.-exec-programma [argument ...] { } +:Het geeft altijd de echte waarde. Het voert een programma uit met de vaste gegeven argumenten en zoveel mogelijk paden. Voor bijna elke implementatie betekenen andere {}-exemplaren extra kopieën van de opgegeven naam (aspect niet nodig voor POSIX).-ok programma [argument ...];:Het is hetzelfde als -exec, maar zal false of true retourneren als het programma 0 geeft.

Vind standaardinstellingen voor het implementeren van -print als de voorwaarden waar zijn als de expressie geen van de volgende waarden -ok, -exec, -print of -print0 gebruikt.

Exploitanten

Operators verbeteren de zoekopdrachtexpressies. Ze worden vermeld in volgorde van afnemende prioriteit:

    (uitpr):Deze operator kan voorrang afdwingen.! uitdr:Als expr false retourneert, wordt true geretourneerd.
  • expr1 expr2 (of expr1 -a expr2 : AND. expr2 wordt niet geëvalueerd als expr1 onwaar is.
  • expr1 -o expr2: OF. expr2 wordt niet geëvalueerd als expr1 waar is.

Voorbeelden van het zoekcommando

Laten we de volgende voorbeelden van de find-opdracht bekijken:

Zoek bestanden op naam

We kunnen alle bestanden doorzoeken die eindigen op de extensie '.txt.' Om dit te doen, voert u de onderstaande opdracht uit:

 find . -name '*.txt' 

Met de bovenstaande opdracht worden alle tekstbestanden uit de huidige werkmap weergegeven. Beschouw de onderstaande uitvoer:

Linux zoeken

Uit de bovenstaande uitvoer worden alle bestanden met de extensie '.txt' weergegeven met de opdracht find.

Bestanden zoeken op type

De parameter '-type' wordt gebruikt om het bestandstype op te geven.

Sommige bestandstypen zijn als volgt:

  • f: normaal bestand
  • d: map
  • l: symbolische links
  • c: karakterapparaten
  • b: apparaten blokkeren

Overweeg het onderstaande commando:

 find . -type d -name '*.bak' 

Met het bovenstaande commando worden alle mappen weergegeven met de extensie '.bak'. Beschouw de onderstaande uitvoer:

Linux zoeken

Uit de bovenstaande uitvoer wordt het commando 'find . -type d -naam '*.bak' toont alle mappen die eindigen op '.bak'.

Vind nieuwere bestanden

De parameter '-newer' helpt bij het zoeken naar bestanden die nieuwer zijn dan het genoemde bestand. Overweeg het onderstaande commando:

 find . -newer msg.txt 

Met het bovenstaande commando worden alle bestanden weergegeven die nieuwer zijn dan 'msg.txt' uit de huidige werkmap. Beschouw de onderstaande uitvoer:

c++ gesplitste tekenreeks
Linux zoeken

Uit de bovenstaande uitvoer blijkt dat alle weergegeven bestanden nieuwer zijn dan het bestand 'msg.txt'.

Zoek en verwijder een bestand

De '-delete' optie wordt gebruikt om een ​​specifiek bestand te verwijderen. We moeten heel voorzichtig zijn bij het gebruik van deze opdracht, omdat er geen optie voor ongedaan maken is als deze eenmaal wordt uitgevoerd. Overweeg het onderstaande commando:

 find . -name Demo.txt -delete 

Met het bovenstaande commando wordt het bestand 'Demo.txt' uit de huidige werkmap verwijderd. Beschouw de onderstaande uitvoer:

Linux zoeken

Zoek een map

De optie 'type -d' wordt gebruikt om een ​​map te vinden. Overweeg het onderstaande commando:

 find . type -depth -name Newdirectory 

Met het bovenstaande commando wordt de locatie 'Newdirectory' gevonden. Beschouw de onderstaande uitvoer:

Linux zoeken

Zoek bestanden op wijzigingstijd

De optie '-mtime', gevolgd door het aantal dagen, wordt gebruikt om de bestanden op basis van wijziging te vinden. Het aantal dagen kan positief of negatief zijn. De negatieve waarde wordt voor minder dan een dag gebruikt, zoals -1 voor de laatste dag, en op dezelfde manier zal +1 het bestand van meer dan een dag geleden vinden. Overweeg het onderstaande commando:

 find ./Newdirectory -mtime -1 

Met de bovenstaande opdracht worden de bestanden gevonden die de afgelopen dag zijn gewijzigd. Beschouw de onderstaande uitvoer:

Linux zoeken

Vind bestanden met toestemming

De optie '-perm' wordt gebruikt om bestanden met toestemming te vinden. Voer het find-commando uit met de optie '-perm' en geef de vereiste waarde door. Overweeg het onderstaande commando:

 find ./ -perm 777 

Met de bovenstaande opdracht worden de bestanden uit de opgegeven map weergegeven die iedereen kan lezen, schrijven en uitvoeren.

Bestanden zoeken en vervangen

Om bestanden te vinden en te vervangen, moeten we de opdracht find combineren met de opdracht sed. Om bestanden te bewerken, gebruikt u de optie '-exec' met de opdracht find. Overweeg het onderstaande commando:

 find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ; 

uit het bovenstaande commando wordt het opgegeven exemplaar vervangen. Beschouw de onderstaande uitvoer:

Linux zoeken

Zoek tekst in meerdere bestanden

We kunnen nog een combinatie maken van het find-commando met het grep-commando om de tekst uit de verschillende bestanden te vinden. Overweeg het onderstaande commando:

 find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ; 

Met het bovenstaande commando worden de regels gevonden die de tekst 'demo' bevatten uit alle tekstbestanden in de directory 'Newdirectory'. Beschouw de onderstaande uitvoer:

vervang een kleur in gimp
Linux zoeken

Uit de bovenstaande uitvoer kunnen we zien dat de regels met de tekst 'demo' zijn weergegeven.

Doorzoek elke map

 $ find / -name file1 -type f -print 

Met het bovenstaande commando worden alle mappen voor een normaal bestand met de titel file1 gevonden en op het scherm afgedrukt. Over het algemeen is het geen goed idee om op deze manier naar bestanden te zoeken. Het kan behoorlijk wat tijd kosten. Het is dus het beste om de map te vermelden. Een paar besturingssystemen kunnen bestandssystemen (dynamisch) aankoppelen die niet gunstig zijn voor de find-opdracht. Meer gecompliceerde bestandsnamen die tekens bevatten die uniek zijn voor de shell, moeten mogelijk tussen enkele aanhalingstekens worden gesloten.