40 bästa exempel på kommandot Find i Linux

Linux-kommandot hitta är ett kraftfullt verktyg som gör det möjligt för systemadministratörer att hitta och hantera filer och kataloger baserat på ett stort antal sökkriterier. Den kan hitta kataloger och filer efter deras namn, typ eller tillägg, storlek, behörigheter etc.

Förutom att hitta filer och kataloger, kan du kombinera sökkommandot med andra att du kan vidta åtgärder på resultatet. Genom att lägga till alternativet -exec kan systemadministratörer köra externa kommandon och utföra åtgärder som att kopiera, flytta, ta bort eller ändra behörigheter för filerna som matchar de angivna kriterierna som storlek, namn, etc.

I den här artikeln kommer vi att börja med att förklara de grundläggande Linux-sökkommandona med exempel. Detta kommer att visa dig hur du hittar filer och kataloger. Vi kommer sedan att visa dig hur du använder alternativet -exec för att agera på filerna eller katalogerna baserat på deras storlek, behörigheter etc.

Den allmänna syntaxen för find-kommandot är

find {path} {name -of-file or dir-to-search} {action-to-take}

Var,

  • sökväg anger katalogen.
  • namn på fil eller dir-to-search : Namnet på filen eller katalogen att leta efter
  • åtgärder att vidta: såsom kopiera, ta bort, flytta, etc.

I den här handledningen kommer vi att förklara hur man hittar filer och kataloger som matchar specificerade mönster. Vi kommer också att se hur man utför åtgärder på filerna eller katalogerna som find-kommandot lokaliserar. Guiden är baserad på Ubuntu men är tillämplig på de flesta Linux-distributioner och -versioner.

Innehållsförteckning

Hitta filer och kataloger

Hitta specifika filer efter namn eller tillägg

För att leta efter en specifik fil, kör följande kommando från roten (/). Kommandot innehåller det exakta namnet på filen du söker efter.

find . -name file22.txt

Produktion

./test/file22.txt
./sales/file22.txt

Observera att resultaten inkluderar sökvägen. Detta är viktigt om du inte känner till katalogen där filen finns, eller om den finns på mer än en plats.

Du kan också söka efter filen i en annan katalog medan du fortfarande befinner dig på den aktuella platsen. I det här fallet måste du ange sökvägen till katalogen där du vill söka.

find ./test -name file22.txt

Letar efter specifika filer i en annan katalog

I vårt fall kommer vi att leta efter alla som börjar med bokstäverfilen i testkatalogen.

find ./test -name file*

Produktion

./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc

Sök efter filer med förlängning

För att hitta en fil i Linux med en viss förlängning, lägg till den i kommandot.

find . -name *.txt

Produktion

./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt

Hitta filer och kataloger efter namn

Använd kommandot nedan för att leta efter filer och kataloger som börjar med bokstäverna qa. I vår dator har vi filerna qatree.txt och qa.txt samt en katalog med namnet qa.

Om vi ​​kör kommandot;

find ./ -name "qa*"

Den returnerar följande utdata

./test/qatree.pdf
./test/qa.txt
./home/qa

Kommandot returnerar både filer och kataloger som matchar sökkriterierna. För att bara hitta filer eller kataloger måste du ange detta i kommandot.

Hitta endast filer eller kataloger

Endast för filer, använd omkopplaren typ f.

Endast filer

find ./ -type f -name "qa*"

Produktion

./test/qatree.pdf
./test/qa.txt

Endast kataloger

Lägg till alternativet typ d för att bara hitta kataloger.

find ./ -type d -name "qa*"

Produktion

./home/qa

Skiftokänsligt sökkommando

Alla sökningar med -name switch är skiftlägeskänsliga och ger inte resultat med stora bokstäver. För att få alla fall, använd alternativet -iname.

find ./ -iname "qa*"

Produktion

./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

Sök efter en fil från flera kataloger

För att hitta filerna i olika kataloger, lägg till deras sökvägar i kommandot. I vårt fall kommer vi att kontrollera test- och numeriska kataloger.

find ./test ./numeric -name file22.txt -type f

Produktion

./test/file22.txt
/root/numeric/file22.txt

Hitta flera filer med olika tillägg från alla kataloger

Du kan använda kommandot find för att hitta flera filer som delar de olika tilläggen såsom *.doc, *.txt *.pdf, etc. Detta kan göras separat, ett tillägg i taget eller med bara ett kommando som inkluderar alla önskade förlängningar.

hitta . -typ f ( -namn ”*.txt” -o -namn ”*.pdf” -o -namn ”*.doc” )

produktion

./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt

Hitta filer som innehåller viss text

Ibland vill du komma åt en fil som innehåller viss text men kan inte komma ihåg dess filnamn eller plats. Detta kommando låter dig hitta alla filer som innehåller din måltext.

För att leta efter alla filer som innehåller ordet hyperkonvergens”, använd;

find / -type f -exec grep -l -i "hyperconvergence" {} ;

Produktion

/root/numeric/hci
/root/HCIP

Alternativet –i gör det möjligt för kommandot att ignorera fall och kommer att hitta texten oavsett om den är versal eller inte, dvs hyperkonvergens, hyperkonvergens, etc.

För att leta efter filerna i en specifik katalog, lägg helt enkelt till dem i kommandot

find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;

Produktion

./numeric/hci

Utforska fler exempel på grep-kommandon.

Hitta filer och kataloger baserat på storlek

Du kan hitta alla filer eller kataloger som är mindre, lika med eller större än en viss storlek, inom ett visst intervall eller tomma. Använd lämplig storlek beroende på vilken typ av filer eller kataloger du söker efter.

Storleksalternativ inkluderar;

c – byte

k – kilobyte

M – Megabyte

G – Gigabyte

Hitta filer av en viss storlek – lika med 30 MB

För att söka hitta alla 30MB-filer

find / -size 30M

Hitta filer som är större än en angiven storlek

find -size +2M

Produktion

. /Downloads/ubuntu18043.iso 
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

Hitta filer som är mindre än 10 MB i den aktuella katalogen

find . -type f -size -10M

Hitta filer med storlekar mellan 100-200MB

När du letar efter filer inom ett specifikt intervall som mellan 100 och 200 MB

find / -size +100M -size -200M

Leta efter kataloger som är större än 20 kb

hitta / -typ d -storlek +20k

Hitta tomma filer och kataloger.

Filer

hitta ./ -typ f -storlek 0

eller

find ./ -type f –empty

Kataloger

find ./ -type d –empty

Hitta filer efter ålder eller ändringstid

Hitta filer som är äldre än n dagar

find /path/ -type f -name '*.txt' -mtime +8

-mtime +8 kommer att leta efter txt-filer som är äldre än 8 dagar.

Efter ändringsdatum

Detta kommer att leta efter filer som har ändrats inom de senaste 17 timmarna

find . -mtime -17 -type f 

Söker efter kataloger som har ändrats under de senaste 10 dagarna

find . -mtime -10 -type d 

Hitta filer baserat på åtkomst eller ändring

Hitta filer baserat på datum eller tid för åtkomst. Detta gör att du kan se filer som har eller inte har nåtts inom en viss period.

För att se filer som inte har nåtts under de senaste 10 dagarna i hemkatalogen.

find /home -atime +10

Filer som öppnades för exakt 10 dagar sedan

find /home -atime 10

Åtkomst inom de senaste 10 dagarna

find /home -atime -10

Hitta filer som har ändrats under de senaste n dagarna

Du kan också leta efter filerna i /home-katalogen som ändrats under de senaste 10 dagarna med kommandot;

find /home -mtime -10 

Hitta filer som ändrats inom en viss period.

Till exempel, alla filer som ändrades för mellan 6 och 15 dagar sedan i hemkatalogen.

find /home -type f -mtime +6 -mtime -15

Filer och kataloger som nåtts inom de senaste 10 minuterna

Använd alternativet -amin för att hitta filerna som har nåtts under de senaste 10 minuterna.

find . -amin -10 -type f

Produktion

./.bash_history
./[email protected]:~#

Kataloger som har nåtts under de senaste 10 minuterna

find . -amin -10 -type d

Hitta filer som matchar specifika behörigheter

Syntax

$ find -perm mode

Där läge är behörigheten som antingen är numerisk som 644, 655, 700, 777, etc, eller bokstäver som u=x, a=r+x, etc.

Du kan ange läget på följande tre olika sätt.

  • Utan prefix när du vill hitta filer med exakt angivna behörigheter.
  • Med ”-” för filer med minst den angivna behörigheten. Detta returnerar filer med de angivna samt ytterligare högre behörigheter.
  • Att använda ”/” kräver att ägaren eller gruppen med behörighet till filen anges.
  • Hitta filer med behörighet 777

    find -perm 777

    Produktion

    ./file1

    Hitta filer med minst 766
    hitta -perm -766

    Produktion

    ./file2
    ./file1

    Kommandot letar efter alla filer där

    • Filägaren har läs-/skriv-/körrättigheter.
    • Gruppen har läs-/skrivbehörighet
    • Andra har läs/skrivbehörighet

    Som sådan returnerar den två filer som uppfyller detta kriterium – fil1 och fil2. Filerna behöver inte ha de exakta 766-behörigheterna och kan ha ytterligare sådana så länge men måste ha åtminstone de angivna.

    Hitta filer som kan skrivas av ägaren

    Vi kommer nu att använda ”/” för att leta efter filer som kan skrivas av antingen deras ägare, grupp eller andra.

    find -perm /222
    .
    ./file2
    ./file3
    ./file1

    Ovanstående letar efter filer som är skrivbara av antingen deras ägare eller grupp.
    Detta returnerar filer som är skrivbara av endera men inte nödvändigtvis båda. För att se filer, där båda har skrivbara behörigheter, använd prefixet –.

    find -perm -220

    Produktion

    ./file2
    ./file1

    Hitta filer som ägs av en användare

    Hitta alla filer som ägs av Jack

    find /home -user jack

    Produktion

    /home/jack
    /home/jack/examples.desktop
    /home/jack/.gnupg
    /home/jack/.gnupg/private-keys-v1.d
    /home/jack/ans.cgi

    Hitta specifika filer som ägs av en användare

    Hitta alla textfiler som ägs av Jack

    find /home -user jack -iname "*.txt"

    Produktion

    /home/jack/docs/file32.txt

    Hitta och lista filer och kataloger tillsammans med deras behörigheter

    find -name "*.conf" | ls -l

    Produktion

    total 120
    drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
    drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
    drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents
    drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
    -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
    drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
    -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt

    Hitta och agera på resultaten

    I det här avsnittet kommer vi att titta på hur du kan agera på filerna som matchar mönstret som anges i find-kommandot.

    Hitta filer och ändra behörigheter

    Hitta och ändra behörigheter för vissa filtyper. I vårt fall kommer vi att arbeta med PHP-filer med olika behörigheter som visas nedan.

    [email protected]:~/ver$ ls -la
    
    total 8
    drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
    drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php

    Vi kommer nu att leta efter alla PHP-filer (ovan) och ersätta deras behörigheter med 755

    find ver -name "*.php" -type f -exec chmod 755 {} ;

    Kommandot letar efter PHP-filer i ver-katalogen och ställer sedan in deras behörighet till 755 (rwxr-xr-x)

    Resultat

    [email protected]:~/ver$ ls -la
    total 8
    drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
    drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php

    Hitta och ändra fil- och katalogbehörigheter

    Hitta filer med 644 behörigheter och ändra dem till att ha 655 behörigheter

    find . -type f -perm 644 -exec chmod 655 {} ;

    Du kan också leta efter kataloger med 644-behörigheter och ersätta detta med 755.

    find . -type d -perm 644

    Produktion

    ./docs   

    Dokumentmappen har 644 behörigheter

    drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs

    För att ställa in den på 755 kör vi

    find . -type d -perm 644 -exec chmod 755 {} ;

    Nu kan vi kolla igen för att se exakt vad 755

    find . -type d -perm 755

    Produktion
    .
    ./docs

    Ovanifrån kan vi se rot- och dokumentkatalogerna har 755 behörigheter.

    Kommandot Ls –la ger följande detaljer

    drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs

    Hitta och kopiera filer eller kataloger

    Hitta och kopiera en specifik fil till en katalog

    Kommandot nedan hittar filen file22.txt och kopierar den till katalogen ~/tmp/images.

    find -iname file22.txt -exec cp {} ~/tmp/images ;

    Hitta och kopiera en typ av filer till en katalog

    För att hitta filer som bilder med jpg-tillägg i den aktuella katalogen och kopiera dem till en annan plats som en bildmapp, använd;

    find -iname '*.jpg' -exec cp {} ~/tmp/images ;

    Detta kommer att hitta och kopiera alla jpg-filer till mappen ~/tmp/images.

    Hitta och kopiera en fil till många kataloger

    Hitta och kopiera en singel till flera kataloger.

    find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

    Detta kommer att hitta filen hci-filen och kopiera den till de tre katalogerna /tmp/dir1/ /tmp/dir2/ och $HOME/3/

    Hitta och flytta filer till en annan katalog

    För att flytta en känd fil från en katalog till en annan. För att flytta filen universal.php;

    find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

    Sök och flytta filer med ett visst tillägg till en annan mapp

    find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

    Hitta vissa filer och flytta till en specifik annan mapp

    find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

    Kommandot letar efter alla filer med namn som börjar med uni och har valfritt tillägg. Det flyttar dem sedan till katalogen /unifiles/

    Hitta och flytta filer baserat på ålder

    Hitta och flytta filer som är äldre än angivna dagar till en annan plats, till exempel arkivet.

    find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

    Detta kommer att leta efter pdf-filer som är äldre än 20 dagar och flytta dem till backup1-katalogen.

    Hitta och ta bort filer och kataloger

    Syntaxen för att hitta och ta bort filer eller kataloger i den aktuella katalogen är

    hitta . -typ f -namn ”fil att radera” -exec rm -f {} ; för att bara ta bort filer eller

    hitta . -typ d -namn ”dir-to-delete” -exec rm -rf {} ; för att bara ta bort kataloger

    Hitta och radera endast specifika filer

    För att hitta och ta bort filer som börjar med til, använd;

    find . -type f -name "til*" -exec rm {} ; 

    För att hitta och ta bort kataloger som börjar med til

    find . -type d -name "til*" -exec rm {} ;

    Ta bort både filer och kataloger

    find . -name "til*" -exec rm -rf {} ; 

    Detta tar bort både filer och kataloger som börjar med bokstäverna til.

    Radera i förlängning

    Nedan är hur du kan hitta och ta bort alla txt-filer i den aktuella katalogen. Ersätt txt-filen med ett annat tillägg som bak, pdf eller något annat som du vill ta bort.

    find . -type f -name "*.txt" -exec rm -f {} ;

    Om du vill att systemet ska uppmana dig att bekräfta innan du tar bort varje fil, lägg till alternativet -i enligt nedan.

    find . -type f -name "*.txt" -exec rm -i {} ;

    Produktion

    rm: remove regular empty file './File22.txt'? y
    rm: remove regular empty file './file22.txt'? y
    rm: remove regular empty file './file23.txt'?

    Som standard kommer -rm inte att ta bort katalogerna och du måste använda alternativet -r för att säkerställa en rekursiv borttagning. Detta säkerställer radering av tomma kataloger och de som innehåller filer. Alternativet -f tvingar bort borttagningen och används för både filerna och katalogerna.

    Hitta och ta bort filer äldre än n dagar

    Hitta och ta bort säkerhetskopior som är äldre än 20 dagar från den aktuella katalogen.

    find . -type f -name '*.bak' -mtime +20 -exec rm {} ;

    Detta tar bort alla .bak-filer som är äldre än 20 dagar.

    Hitta och radera endast kataloger

    För att radera en katalog som heter dir22

    find . -type d -name dir22 -exec rm -rf {} ;

    Se till att du matchar katalognamnets skiftläge eller använd alternativet -iname.

    find . -type d -iname Dir22 -exec rm -rf {} ;

    Tar bort både Dir22 och dir22

    För att bekräfta före radering, använd alternativet -i.

    find . -type d -iname Dir22 -exec rm -rf -i {} ;

    Produktion
    rm: ta bort katalogen ’./Dir22’? n
    rm: ta bort katalogen ’./dir22’? y

    I vårt fall skrev vi n för katalogen Dir22 som inte kommer att tas bort och y för katalogen 22 som nu kommer att tas bort.

    Hitta och ta bort tomma filer

    Du kan använda något av följande kommandon för att hitta tomma filer och ta bort dem automatiskt.

    find ./ -type f -size 0 -exec rm -f {} ;

    eller
    hitta ./ -typ f -storlek 0 | xargs rm -f
    eller
    hitta ./ -typ f -storlek 0 -radera

    Hitta och ta bort tomma kataloger

    För att ta bort tomma kataloger använder vi alternativet d.

    find ./ -type d -empty -exec rmdir {} ;

    Ett annat alternativ är att använda radera istället för ta bort.

    find ./ -type d -empty -delete

    Observera att radering av systemfiler eller viktiga filer från din dator kan skada operativsystemet eller applikationerna eller leda till förlust av viktiga data.

    För att undvika oavsiktliga raderingar är det bästa praxis att använda ett icke-rootanvändarkonto. Se också till att du tar bort rätt filer som inte är användbara och att du har en säkerhetskopia av alla dina datafiler för säkerhets skull.

    Vad kommer härnäst?

    Varsågod och prova ovanstående Linux-sökkommandon i ditt labb eller ICKE PRODUCTION-miljö. Se om du kan använda några för att automatisera rensningen av filsystemet med Crontab. Och för att behärska Linux, kolla in det här onlinekurs.