Hitta filer i Linux med hjälp av kommandoraden

find är ett kommando för rekursiv filtrering av objekt i filsystemet baserat på en enkel villkorsmekanism. Använd find för att söka efter en fil eller katalog i ditt filsystem. Med hjälp av flaggan -exec kan filer hittas och omedelbart bearbetas inom samma kommando.

Sök Linux-filer efter namn eller filändelse

Använd find från kommandoraden för att hitta en specifik fil efter namn eller filändelse. Följande exempel söker efter *.err-filer i katalogen /home/username/ och alla underkataloger:

find /home/username/ -name "*.err"

Du bör se ett liknande utdata i konsolen:

 /home/username/example.errThe matching file in the /home/username/ directory is "example.err"

Gemensamma Linux Find-kommandon och syntax

Kommandot find har vanligtvis följande form:

find options starting/path expression
  • Attributet options styr find-processens beteende och optimeringsmetod.
  • Attributet starting/path definierar den översta katalogen där find börjar filtrera.
  • Attributet expression styr testerna som söker i kataloghierarkin för att producera utdata.

Hitta en fil i Linux med hjälp av filnamnet

För att hitta en fil med hjälp av filnamnet använder du syntaxen find -name filename. Om du utelämnar sökvägen söker du efter filen över hela disken. Du kan till exempel hitta en fil med namnet example.err som finns i katalogen /home/username med följande kommando:

find -name example.err

Du bör se ett liknande utdata:

 ./username/example.err

Hitta en fil i den aktuella katalogen med hjälp av Find-kommandot

Ta en titt på exemplets katalogstruktur och filer. Det hänvisas till dem i alla exempel i den här guiden.

 ├── 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

Om du befinner dig i directory_1 och vill hitta filen example.err i katalogen eller någon av dess underkataloger, kan du utfärda följande kommando:

find . -name example.err

Din utdata liknar följande:

 ./example.err./directory_1/example.err

Utmatningen speglar directory_1 katalogstruktur:

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err

Finn bildfiler i Linux med hjälp av kommandoraden

Med hänvisning till filstrukturen i föregående avsnitt finns det en bild med namnet image01.png som ligger i roten (/)s i katalogstrukturen.

För att hitta filen image01.png kör du följande findkommando som lokaliserar alla .pngfiler som finns lagrade i katalogen /.

find -name *.png

Du bör se en liknande utdata:

 ./image01.png

Ändra filtyp för bilden och leta efter alla .jpgfiler i rotkatalogen (/):

find -name *.jpg

Utdatan liknar exemplet. Se exempelkatalogstrukturen i föregående avsnitt för att se var filen finns.

 ./web_files/unnamed.jpg

Hitta en tom fil i din katalog med hjälp av kommandoraden

För att hitta en tom fil i din katalog med hjälp av kommandoraden, utför följande kommando:

find . -type f -empty

Om inget utdata returneras finns det inte någon tom fil i din aktuella katalog.

Optioner och optimeringar för att hitta filer i Linux med hjälp av kommandoraden

Standardkonfigurationen för find ignorerar symboliska länkar. Om du vill att find ska följa och returnera symboliska länkar lägger du till alternativet -L till kommandot, enligt nedan:

find -O3 -L /var/www/ -name "*.html"

Detta kommando aktiverar den maximala optimeringsnivån (-O3) och tillåter find att följa symboliska länkar (-L). find söker i hela katalogträdet under /var/www/ efter filer som slutar med .html.

find optimerar sin filtreringsstrategi för att öka prestandan. Tre optimeringsnivåer som kan väljas av användaren anges som -O1, -O2 och -O3. Optimeringen -O1 är standard och tvingar find att filtrera baserat på filnamn innan alla andra tester körs.

Optimering på nivån -O2 prioriterar filnamnsfilter, som i -O1, och kör sedan all filtypfiltrering innan man fortsätter med andra mer resurskrävande villkor. Optimering på nivå -O3 gör det möjligt för find att utföra den allvarligaste optimeringen och omordnar alla tester baserat på deras relativa kostnad och sannolikheten för att de ska lyckas.

Kommando Beskrivning
-O1 Filtrera baserat på filnamn först (standard).
-O2 Filnamn först, sedan filtyp.
-O3 Möjliggör för find att automatiskt omordna sökningen utifrån effektiv resursanvändning och sannolikhet. av framgång
-maxdepth X Sök i aktuell katalog samt i alla underkataloger X nivåer djupt.
-iname Sök utan hänsyn till textuppgifter.
-not Returnerar endast resultat som inte matchar testfallet.
-type f Sök efter filer.
-type d Sök efter kataloger.

Sök efter filer i Linux efter ändringstidpunkt med hjälp av kommandoraden

Kommandot find kan filtrera en kataloghierarki baserat på när en fil senast ändrades. Följande kommando hittar till exempel alla filer med tillägget .err som ändrats under de senaste 7 dagarna:

find / -name "*err" -mtime -7

Exempelkommandot ger följande utdata:

 /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

Använd Grep för att hitta filer i Linux med hjälp av kommandoraden

Kommandot find kan endast filtrera kataloghierarkin baserat på en fils namn och metadata. Om du behöver söka utifrån filens innehåll kan du använda ett verktyg somegrep. Tänk på följande exempel:

find . -type f -exec grep "test" '{}' \; -print

Detta kommando söker alla objekt i den aktuella kataloghierarkin (.) som är en fil (-type f) och kör sedan kommandot grep "test" för varje fil som uppfyller villkoren. De filer som stämmer skrivs ut på skärmen (-print). De hängande parenteserna ({}) är en platshållare för resultaten av sökmatchningen. {} omges av enkla citattecken (') för att undvika att grep får ett felaktigt filnamn. Kommandot -exec avslutas med ett semikolon (;), som bör undvikas (\;) för att undvika tolkning av skalet.

Filen som används i exemplet (example.err) har en text inuti som lyder ”test”. När du kör exempelkommandot ser du en liknande utdata:

 test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err

Grep identifierade varje fil i den aktuella arbetskatalogen som innehåller strängen ”test”.

Obs

Före find-kommandots implementering av -exec-alternativet kunde du generera ett liknande utdata som exemplet ovan med hjälp av xargs-kommandot:

find . -type f -print | xargs grep "test"

Bearbeta och hitta filer med hjälp av Find-kommandot i Linux

Objektsalternativet -exec kör kommandon mot varje objekt som matchar find-uttrycket. Tänk på följande exempel:

find . -name "example.err" -exec chmod o+r '{}' \;

Detta filtrerar varje objekt i den aktuella hierarkin (.) efter filer som heter rc.conf och kör kommandot chmod o+r för att ändra filbehörigheterna för find-kommandots resultat.

Exempelkommandot körs och exekverar -exec-alternativet i rotkatalogen för find-processen. Använd -execdir för att köra det angivna kommandot i den katalog där matchningen finns. Detta kan lindra säkerhetsproblem och ge bättre prestanda för vissa operationer.

Oalternativen -exec eller -execdir körs utan ytterligare uppmaningar. Om du föredrar att bli tillfrågad innan åtgärder vidtas ersätter du -exec med -ok eller -execdir med -okdir.

Hur man hittar och tar bort filer med hjälp av Linux-kommandoraden

Försiktighet

Använd det här alternativet med stor försiktighet.

Lägg till alternativet -delete i slutet av ett matchningsuttryck för att ta bort alla filer som matchar. Använd det här alternativet när du är säker på att resultaten endast matchar de filer som du vill ta bort.

I exemplet nedan söker find rekursivt efter alla filer i hierarkin med början i den aktuella katalogen och tar bort alla filer som slutar med tillägget .err:

find . -name "*.err" -delete

Har du fortfarande några frågor?

Gäng med i vår community och lägg upp dina frågor så att andra Linux- och Linuxentusiaster kan hjälpa dig.

Relaterade frågor:

Lämna ett svar

Din e-postadress kommer inte publiceras.