Zoek bestanden en mappen op Linux met het find Commando | Opensource.com

ongeacht hoe georganiseerd ik oplos, het lijkt erop dat er altijd momenten zijn waarop ik gewoon een bestand niet kan vinden. Soms is het omdat ik me de naam van het bestand niet kan herinneren. Soms ken ik de naam, maar ik weet niet meer waar ik hem wilde bewaren. Er zijn zelfs momenten dat ik een bestand nodig heb dat ik in de eerste plaats niet heb gemaakt. Het maakt niet uit wat het dilemma is, maar ik weet dat ik op een POSIX-systeem altijd het find commando heb.

find

het commando find wordt gedefinieerd door de POSIX-specificatie, die de open standaard maakt waarmee POSIX-systemen (inclusief Linux, BSD en macOS) worden gemeten. Simpel gezegd, je hebt al find geïnstalleerd zolang je Linux, BSD of macOS draait.

echter, niet alle find commando ‘ s zijn precies hetzelfde. Het commando GNU find heeft bijvoorbeeld functies die het commando BSD of Busybox of Solaris find misschien niet heeft of wel heeft, maar anders implementeert. Dit artikel Gebruikt GNU find uit het findutils pakket omdat het direct beschikbaar en vrij populair is. De meeste commando ‘ s in dit artikel werken met andere implementaties van find, maar als je een commando probeert op een ander platform dan Linux en onverwachte resultaten krijgt, probeer dan de GNU-versie te downloaden en te installeren.

zoek een bestand op naam

u kunt een bestand vinden op basis van zijn bestandsnaam door de volledige bestandsnaam of delen van de bestandsnaam op te geven met behulp van reguliere expressies. Het find commando vereist het pad naar de map waarin u wilt zoeken, opties om te specificeren welk attribuut u zoekt (bijvoorbeeld –name voor een hoofdlettergevoelige bestandsnaam), en vervolgens de zoekstring. Standaard wordt uw zoekterm letterlijk behandeld: het find Commando zoekt naar een bestandsnaam die precies de string is die u tussen aanhalingstekens invoert, tenzij u de reguliere expressie syntaxis gebruikt.

stel dat uw Documentenmap vier bestanden bevat: Foo, foo, foobar.txt, en foo.xml. Hier is een letterlijke zoekopdracht naar een bestand met de naam “foo”:

$ find ~ -name "foo"
/home/tux/Documents/examples/foo

u kunt uw zoekopdracht verbreden door deze niet hoofdlettergevoelig te maken met de optie -iname :

$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

jokertekens

u kunt basic shell jokertekens gebruiken om uw zoekopdracht uit te breiden. Bijvoorbeeld, de sterretje (*) vertegenwoordigt een willekeurig aantal tekens:

$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

een vraagteken (?) vertegenwoordigt een enkel teken:

$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

Dit is geen reguliere expressie syntaxis, dus de punt (.) vertegenwoordigt een letterlijke punt in dit voorbeeld.

reguliere expressies

u kunt ook reguliere expressies gebruiken. Net als bij -iname en -name is er zowel een hoofdlettergevoelige als een hoofdletterongevoelige optie. In tegenstelling tot de opties -name en -iname Wordt een zoekopdracht -regex en -iregex toegepast op het hele pad, niet alleen op de bestandsnaam. Dat betekent dat als u naar foo zoekt, u geen resultaten krijgt omdat foo niet overeenkomt met /home/tux/Documents/foo. In plaats daarvan moet je ofwel zoeken naar het hele pad, of anders gebruik maken van een jokertekenreeks aan het begin van je tekenreeks:

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

zoek een bestand dat in de laatste week is gewijzigd

om een bestand te vinden dat u vorige week voor het laatst hebt gewijzigd, gebruikt u de optie -mtime samen met een (negatief) aantal dagen in het verleden:

$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

zoek een bestand gewijzigd binnen een bereik van dagen

u kunt -mtime opties combineren om een bestand te vinden binnen een bereik van dagen. Geef voor het eerste -mtime – argument het meest recente aantal dagen op dat u het bestand had kunnen wijzigen, en voor het tweede het grootste aantal dagen. Bijvoorbeeld, deze zoekopdracht zoekt naar bestanden met wijzigingen keer meer dan een dag in het verleden, maar niet meer dan zeven:

$ find ~ -mtime +1 -mtime -7

beperk een zoekopdracht op bestandstype

het is gebruikelijk om de resultaten van find te optimaliseren door het bestandstype op te geven waarnaar u op zoek bent. Je moet deze optie niet gebruiken als je niet zeker weet wat je zoekt, maar als je weet dat je op zoek bent naar een bestand en niet naar een directory, of een directory maar niet naar een bestand, dan kan dit een geweldig filter zijn om te gebruiken. De optie is -type, en de argumenten zijn een lettercode die een paar verschillende soorten gegevens vertegenwoordigt. De meest voorkomende zijn:

  • d – map
  • f – bestand
  • l – symbolische link
  • s – aansluiting
  • p – named pipe (gebruikt voor FIFO)
  • b – blok speciale (meestal een harde schijf aanwijzing)

Hier zijn een aantal voorbeelden:

$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1

Aanpassen bereik

De find commando is recursief standaard, wat betekent dat het de zoekopdrachten voor de resultaten in de mappen van mappen in mappen (en zo verder). Dit kan overweldigend zijn in een groot bestandssysteem, maar u kunt de optie -maxdepth gebruiken om te bepalen hoe diep in uw mappenstructuur u wilt dat find afdaalt:

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

u kunt afwisselend de minimale diepte van recursie instellen met -mindepth:

$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255

download het spiekbriefje

dit artikel behandelt alleen de basisfuncties van find. Het is een geweldige tool voor het zoeken door uw systeem, maar het is ook een echt nuttig front-end voor de krachtige parallelle Commando. Er zijn veel redenen om find te leren, dus download ons gratis find spiekbriefje om u meer te leren over het commando.

Leave a Reply