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
- Gemensamma Linux Find-kommandon och syntax
- Hitta en fil i Linux med hjälp av filnamnet
- Hitta en fil i den aktuella katalogen med hjälp av Find-kommandot
- Finn bildfiler i Linux med hjälp av kommandoraden
- Hitta en tom fil i din katalog med hjälp av kommandoraden
- Optioner och optimeringar för att hitta filer i Linux med hjälp av kommandoraden
- Sök efter filer i Linux efter ändringstidpunkt med hjälp av kommandoraden
- Använd Grep för att hitta filer i Linux med hjälp av kommandoraden
- Bearbeta och hitta filer med hjälp av Find-kommandot i Linux
- Hur man hittar och tar bort filer med hjälp av Linux-kommandoraden
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
styrfind
-processens beteende och optimeringsmetod. - Attributet
starting/path
definierar den översta katalogen därfind
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 find
kommando som lokaliserar alla .png
filer 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 .jpg
filer 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 avxargs
-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: