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