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:
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:
- 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
- Zoek bestanden op type
- Vind nieuwere bestanden
- Zoek en verwijder een bestand
- Zoek een map
- Zoek bestanden op wijzigingstijd
- Vind bestanden met toestemming
- Bestanden zoeken en vervangen
- Zoek tekst in meerdere bestanden
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:
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:
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
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:
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:
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:
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:
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
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.