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
options
attribuut controleert het gedrag en de optimalisatie methode van hetfind
proces. - Het
starting/path
attribuut definieert de top level directory waarfind
begint te filteren. - Het
expression
attribuut 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
-exec
optie door hetfind
commando, kon u een soortgelijke uitvoer genereren als in het voorbeeld hierboven met hetxargs
commando: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: