find is een opdracht voor het recursief filteren van objecten in het bestandssysteem op basis van een eenvoudig voorwaardelijk mechanisme. Gebruik find om naar een bestand of map op uw bestandssysteem te zoeken. Met de vlag -exec kunnen bestanden worden gevonden en onmiddellijk worden verwerkt binnen hetzelfde commando.

- Vind Linux bestanden op naam of extensie
- Common Linux Find Commands and Syntax
- Vind een bestand in Linux met behulp van de bestandsnaam
- Vind een bestand in uw huidige directory met behulp van het commando Zoeken
- Vind beeldbestanden in Linux met behulp van de opdrachtregel
- Een leeg bestand in uw directory vinden met behulp van de opdrachtregel
- Opties en optimalisaties voor het vinden van bestanden in Linux met behulp van de opdrachtregel
- Vind bestanden in Linux op wijzigingsdatum met behulp van de opdrachtregel
- Gebruik Grep om bestanden in Linux te vinden met de opdrachtregel
- Bestanden verwerken en vinden met het Find commando in Linux
- Hoe bestanden zoeken en verwijderen met de Linux Command Line
Vind Linux bestanden op naam of extensie
Gebruik find vanaf de commandoregel om een specifiek bestand op naam of extensie te vinden. Het volgende voorbeeld zoekt naar *.err bestanden in de /home/username/ directory en alle sub-directories:
find /home/username/ -name "*.err"
U zou een gelijkaardige uitvoer in uw console moeten zien:
/home/username/example.errThe matching file in the /home/username/ directory is "example.err"
Common Linux Find Commands and Syntax
Het find commando neemt gewoonlijk de volgende vorm aan:
find options starting/path expression
- Het
optionsattribuut controleert het gedrag en de optimalisatie methode van hetfindproces. - Het
starting/pathattribuut definieert de top level directory waarfindbegint te filteren. - Het
expressionattribuut controleert de tests die de directory hiërarchie doorzoeken om uitvoer te produceren.
Vind een bestand in Linux met behulp van de bestandsnaam
Om een bestand te vinden met behulp van de bestandsnaam, gebruikt u de syntax find -name filename. Als u het pad weglaat, wordt het bestand over de hele schijf gezocht. U kunt bijvoorbeeld een bestand met de naam example.err vinden in uw directory /home/username met het volgende commando:
find -name example.err
U zou een soortgelijke uitvoer moeten zien:
./username/example.err
Vind een bestand in uw huidige directory met behulp van het commando Zoeken
Kijk eens naar de voorbeelddirectorystructuur en -bestanden. Hiernaar wordt verwezen in de voorbeelden van deze handleiding.
├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err
Als u in directory_1 bent en u wilt het bestand example.err vinden in de directory of een van zijn submappen, kunt u het volgende commando geven:
find . -name example.err
Uw uitvoer lijkt op het volgende:
./example.err./directory_1/example.err
De uitvoer geeft de directory-structuur van directory_1 weer:
├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err
Vind beeldbestanden in Linux met behulp van de opdrachtregel
Refererend naar de bestandsstructuur in de vorige sectie, is er een image met de naam image01.png dat zich in de root (/)s van de mappenstructuur bevindt.
Om het bestand image01.png te vinden, voert u het volgende find commando uit dat alle .png bestanden vindt die zijn opgeslagen in de / directory.
find -name *.png
U zou een soortgelijke uitvoer moeten zien:
./image01.png
Wijzig het bestandstype van de afbeelding en zoek naar .jpg bestanden in de hoofddirectory (/):
find -name *.jpg
De uitvoer lijkt op die van het voorbeeld. Raadpleeg de voorbeeldmapstructuur in de vorige sectie om de locatie van het bestand te zien.
./web_files/unnamed.jpg
Een leeg bestand in uw directory vinden met behulp van de opdrachtregel
Om een leeg bestand in uw directory te vinden met behulp van de opdrachtregel, voert u het volgende commando uit:
find . -type f -empty
Als er geen uitvoer wordt geretourneerd, dan is er geen leeg bestand in uw huidige directory.
Opties en optimalisaties voor het vinden van bestanden in Linux met behulp van de opdrachtregel
De standaardconfiguratie voor find negeert symbolische koppelingen. Als u wilt dat find symbolische koppelingen volgt en teruggeeft, voegt u de optie -L toe aan het commando, zoals hieronder getoond:
find -O3 -L /var/www/ -name "*.html"
Dit commando schakelt het maximale optimalisatieniveau (-O3) in en staat find toe symbolische koppelingen te volgen (-L). find doorzoekt de hele mapstructuur onder /var/www/ naar bestanden die eindigen op .html.
find optimaliseert zijn filterstrategie om de prestaties te verbeteren. Er zijn drie optimalisatieniveaus die door de gebruiker kunnen worden geselecteerd: -O1, -O2 en -O3. De optimalisatie -O1 is de standaard en dwingt find te filteren op bestandsnaam voordat alle andere tests worden uitgevoerd.
Optimalisatie op het niveau -O2 geeft voorrang aan bestandsnaamfilters, zoals in -O1, en voert vervolgens alle bestandstype-filters uit voordat wordt verdergegaan met andere voorwaarden die meer middelen vergen. Met optimalisatie op niveau -O3 kan find de zwaarste optimalisatie uitvoeren en worden alle tests opnieuw gerangschikt op basis van hun relatieve kosten en de waarschijnlijkheid van hun succes.
| Command | Description |
|---|---|
-O1 |
Filter eerst op bestandsnaam (standaard). |
-O2 |
Bestandsnaam eerst, dan bestandstype. |
-O3 |
Mogelijkheid voor find om het zoeken automatisch te herschikken op basis van efficiënt gebruik van bronnen en waarschijnlijkheid. van succes |
-maxdepth X |
Zoek in de huidige directory en in alle submappen X niveaus diep. |
-iname |
Zoek zonder rekening te houden met de tekstcase. |
-not |
Rugkeer alleen resultaten die niet met de testcase overeenkomen. |
-type f |
Zoek naar bestanden. |
-type d |
Zoek naar directory’s. |
Vind bestanden in Linux op wijzigingsdatum met behulp van de opdrachtregel
De opdracht find kan een directoryhiërarchie filteren op basis van wanneer een bestand voor het laatst is gewijzigd. Het volgende commando vindt bijvoorbeeld elk bestand met de extensie .err dat de laatste 7 dagen is gewijzigd:
find / -name "*err" -mtime -7
Het voorbeeldcommando geeft de volgende uitvoer:
/home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err
Gebruik Grep om bestanden in Linux te vinden met de opdrachtregel
Het find commando kan alleen de directoryhiërarchie filteren op basis van de naam en metagegevens van een bestand. Als u moet zoeken op basis van de inhoud van het bestand, kunt u een programma alsegrep gebruiken. Neem het volgende voorbeeld:
find . -type f -exec grep "test" '{}' \; -print
Deze opdracht doorzoekt elk object in de huidige directoryhiërarchie (.) dat een bestand is (-type f) en voert dan de opdracht grep "test" uit voor elk bestand dat aan de voorwaarden voldoet. De bestanden die aan de voorwaarden voldoen, worden op het scherm afgedrukt (-print). De accolades ({}) zijn een plaatshouder voor de resultaten van de zoekresultaten. De {} zijn tussen enkele aanhalingstekens geplaatst (') om te voorkomen dat grep een misvormde bestandsnaam krijgt. Het -exec commando wordt afgesloten met een puntkomma (;), die moet worden ge-escaped (\;) om interpretatie door de shell te voorkomen.
Het bestand dat in het voorbeeld wordt gebruikt (example.err) heeft tekst in zich dat “test” zegt. Wanneer u het voorbeeldcommando uitvoert, ziet u een soortgelijke uitvoer:
test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err
Grep heeft elk bestand in de huidige werkdirectory geïdentificeerd dat de tekenreeks “test” bevat.
Opmerking
Voor de implementatie van de
-execoptie door hetfindcommando, kon u een soortgelijke uitvoer genereren als in het voorbeeld hierboven met hetxargscommando:find . -type f -print | xargs grep "test"
Bestanden verwerken en vinden met het Find commando in Linux
De -exec optie voert commando’s uit tegen elk object dat overeenkomt met de find expressie. Neem het volgende voorbeeld:
find . -name "example.err" -exec chmod o+r '{}' \;
Dit filtert elk object in de huidige hiërarchie (.) op bestanden met de naam rc.conf en voert het chmod o+r commando uit om de bestandsrechten van de resultaten van het find commando te wijzigen.
Het voorbeeldcommando voert de -exec optie uit in de hoofddirectory van het find proces. Gebruik -execdir om het opgegeven commando uit te voeren in de directory waar de overeenkomst zich bevindt. Dit kan beveiligingsproblemen verlichten en betere prestaties opleveren voor sommige bewerkingen.
De -exec of -execdir opties worden zonder verdere prompts uitgevoerd. Als u liever wordt gevraagd voordat actie wordt ondernomen, vervangt u -exec door -ok of -execdir door -okdir.
Hoe bestanden zoeken en verwijderen met de Linux Command Line
Voorzichtig
Gebruik deze optie met uiterste voorzichtigheid.
Voeg de optie -delete toe aan het eind van een overeenkomstige uitdrukking om alle overeenkomende bestanden te verwijderen. Gebruik deze optie wanneer u er zeker van bent dat de resultaten alleen overeenkomen met de bestanden die u wilt verwijderen.
In het onderstaande voorbeeld zoekt find recursief alle bestanden in de hiërarchie vanaf de huidige directory en verwijdert alle bestanden die eindigen met de extensie .err:
find . -name "*.err" -delete
Heeft u nog steeds een paar vragen?
Maak deel uit van onze Community en stel uw vragen zodat andere Linode- en Linux-enthousiastelingen u kunnen helpen.
Gerelateerde vragen: