40 bästa exempel på kommandot Find i Linux

By rik

Innehållsförteckning

Utforska kraften i kommandot ’find’ i Linux

Kommandot ’find’ i Linux är ett mycket användbart verktyg som ger systemadministratörer möjligheten att lokalisera och hantera filer samt kataloger baserat på ett stort antal sökparametrar. Det möjliggör sökning efter kataloger och filer med hjälp av deras namn, typ, filändelse, storlek, rättigheter och mycket mer.

Utöver att endast hitta filer och kataloger, kan sökkommandot kombineras med andra kommandon för att utföra åtgärder på de matchande resultaten. Genom att använda flaggan ’-exec’ kan systemadministratörer köra externa kommandon och därmed utföra operationer som kopiering, flyttning, radering eller ändring av rättigheter för filerna som motsvarar de angivna kriterierna, såsom storlek eller namn.

I den här artikeln kommer vi att inledningsvis undersöka grundläggande Linux sökkommandon med olika exempel. Detta kommer att visa dig hur man hittar filer och kataloger. Vi kommer sedan att demonstrera hur du kan använda flaggan ’-exec’ för att vidta åtgärder på filer eller kataloger beroende på deras storlek, rättigheter med mera.

Den generella syntaxen för ’find’-kommandot är:

find {sökväg} {namn-på-fil-eller-katalog-att-söka} {åtgärd-att-vidta}

Där:

  • sökväg: anger den katalog som ska sökas igenom.
  • namn-på-fil-eller-katalog-att-söka: Namnet på filen eller katalogen som ska lokaliseras.
  • åtgärd-att-vidta: Det kommando som ska utföras, t.ex. kopiera, ta bort eller flytta.

I den här guiden kommer vi att klargöra hur man hittar filer och kataloger som matchar definierade mönster. Vi kommer också att demonstrera hur man utför operationer på de filer eller kataloger som kommandot ’find’ hittar. Den här guiden är baserad på Ubuntu men fungerar med de flesta Linux-distributioner och versioner.

Lokalisera filer och kataloger

Hitta specifika filer efter namn eller filändelse

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

find . -name file22.txt

Exempel på utdata:

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

Lägg märke till att resultaten inkluderar sökvägen. Detta är viktigt om du inte vet katalogen där filen finns, eller om den finns på flera ställen.

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

find ./test -name file22.txt

Sök efter specifika filer i en annan katalog

I vårt exempel kommer vi att leta efter allt som börjar med bokstäverna ’file’ i katalogen ’test’.

find ./test -name file*

Exempel på utdata:

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

Sök efter filer med en specifik filändelse

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

find . -name *.txt

Exempel på utdata:

./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 följande kommando för att leta efter filer och kataloger som börjar med bokstäverna ’qa’. I vår miljö har vi filerna ’qatree.txt’ och ’qa.txt’ samt en katalog med namnet ’qa’.

Om vi kör kommandot:

find ./ -name "qa*"

Returneras följande utdata:

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

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

Hitta endast filer eller kataloger

För att söka endast efter filer, använd flaggan ’-type f’.

Endast filer:

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

Exempel på utdata:

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

Endast kataloger:

Lägg till flaggan ’-type d’ för att endast hitta kataloger.

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

Exempel på utdata:

./home/qa

Skiftlägesokänslig sökning

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

find ./ -iname "qa*"

Exempel på utdata:

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

Sök efter en fil i flera kataloger

För att hitta filer i olika kataloger, lägg till deras sökvägar i kommandot. I vårt fall kommer vi att kolla katalogerna ’test’ och ’numeric’.

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

Exempel på utdata:

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

Hitta flera filer med olika filändelser från alla kataloger

Du kan använda kommandot ’find’ för att hitta flera filer som delar olika filändelser, såsom *.doc, *.txt, *.pdf och så vidare. Detta kan göras separat, en filändelse i taget, eller med ett enda kommando som inkluderar alla önskade filändelser.

Exempel:

find . -type f \( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" \)

Exempel på utdata:

./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 kan du behöva hitta en fil som innehåller viss text men du kanske inte kommer ihåg filnamnet eller dess placering. 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" {} ;

Exempel på utdata:

/root/numeric/hci
/root/HCIP

Flaggan ’-i’ gör att kommandot ignorerar skiftlägeskänsligheten och hittar texten oavsett om den är med stora eller små bokstäver, dvs. hyperkonvergens, Hyperkonvergens och så vidare.

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" {} ;

Exempel på utdata:

./numeric/hci

Utforska fler exempel på kommandot grep.

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 som är tomma. Använd lämplig storleksenhet beroende på vilken typ av filer eller kataloger du letar efter.

Storleksenheter som kan användas är:

c – byte

k – kilobyte

M – Megabyte

G – Gigabyte

Hitta filer av en viss storlek – lika med 30 MB

För att hitta alla filer som är 30MB:

find / -size 30M

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

find -size +2M

Exempel på utdata:

./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

find / -type d -size +20k

Hitta tomma filer och kataloger.

Filer:

find ./ -type f -size 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 låter dig se filer som har, eller inte har, öppnats inom en viss tidsperiod.

För att se filer som inte har öppnats under de senaste 10 dagarna i hemkatalogen:

find /home -atime +10

Filer som öppnades för exakt 10 dagar sedan:

find /home -atime 10

Filer som öppnades inom de senaste 10 dagarna:

find /home -atime -10

Hitta filer som har ändrats under de senaste n dagarna

Du kan också leta efter filer i katalogen /home 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 öppnats inom de senaste 10 minuterna

Använd flaggan -amin för att hitta filer som har öppnats under de senaste 10 minuterna.

find . -amin -10 -type f

Exempel på utdata:

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

Kataloger som öppnats under de senaste 10 minuterna:

find . -amin -10 -type d

Hitta filer som matchar specifika rättigheter

Syntax:

$ find -perm mode

Där ’mode’ är de rättigheter som antingen är numeriska, som 644, 655, 700, 777 osv., eller med bokstäver, som u=x, a=r+x, osv.

Du kan specificera rättigheterna på följande tre olika sätt:

  • Utan prefix, när du vill hitta filer med exakt de angivna rättigheterna.
  • Med ”-” för filer som har minst de angivna rättigheterna. Detta ger filer med de angivna rättigheterna samt alla ytterligare, högre, rättigheter.
  • Att använda ”/” kräver att filens ägare eller grupp rättigheter anges.
  • Hitta filer med rättighet 777

    find -perm 777

    Exempel på utdata:

    ./file1

    Hitta filer med minst 766:

    find -perm -766

    Exempel på utdata:

    ./file2
    ./file1

    Kommandot söker efter alla filer där:

    • Filägaren har läs-, skriv- och körbehörighet.
    • Gruppen har läs- och skrivbehörighet.
    • Andra har läs- och skrivbehörighet.

    Som sådan returneras två filer som uppfyller detta kriterium – file1 och file2. Filerna behöver inte ha de exakta 766-behörigheterna utan kan ha ytterligare sådana så länge de har minst de angivna.

    Hitta filer som kan skrivas av ägaren

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

    find -perm /222

    Exempel på utdata:

    .
    ./file2
    ./file3
    ./file1

    Ovanstående letar efter filer som kan skrivas av antingen deras ägare eller grupp.
    Detta returnerar filer som kan skrivas av antingen den ena eller den andra, men inte nödvändigtvis båda. För att se filer där båda har skrivbehörighet, använd prefixet ”-”.

    find -perm -220

    Exempel på utdata:

    ./file2
    ./file1

    Hitta filer som ägs av en användare

    Hitta alla filer som ägs av Jack:

    find /home -user jack

    Exempel på utdata:

    /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"

    Exempel på utdata:

    /home/jack/docs/file32.txt

    Hitta och lista filer och kataloger tillsammans med deras rättigheter

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

    Exempel på utdata:

    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 undersöka hur du kan agera på de filer som matchar det mönster som anges i kommandot ’find’.

    Hitta filer och ändra rättigheter

    Hitta och ändra rättigheter för vissa filtyper. I vårt exempel kommer vi att arbeta med PHP-filer med olika rättigheter 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 rättigheter med 755.

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

    Kommandot söker efter PHP-filer i ’ver’-katalogen och ställer sedan in deras rättighet 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 katalogrättigheter

    Hitta filer med 644 rättigheter och ändra dem till att ha 655 rättigheter:

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

    Du kan också leta efter kataloger med 644 rättigheter och ersätta detta med 755.

    find . -type d -perm 644

    Exempel på utdata:

    ./docs

    Katalogen ’docs’ har 644 rättigheter.

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

    För att ställa in den till 755 kör vi:

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

    Nu kan vi kolla igen för att se vad som ändrats till 755:

    find . -type d -perm 755

    Exempel på utdata:

    .
    ./docs

    Ovanifrån kan vi se att rot- och dokumentkatalogerna har 755 rättigheter.

    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 är bilder med filändelsen ’jpg’ 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 fil till flera kataloger:

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

    Detta kommer att hitta filen ’hci’ 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 en viss filändelse 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 söker efter alla filer som börjar med namnet ’uni’ och har valfri filändelse. Det flyttar dem sedan till katalogen ’/unifiles/’.

    Hitta och flytta filer baserat på ålder

    Hitta och flytta filer som är äldre än ett angivet antal dagar till en annan plats, till exempel till arkivet:

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

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

    Hitta och ta bort filer och kataloger

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

    find . -type f -name "fil-att-radera" -exec rm -f {} ; för att endast ta bort filer, eller:

    find . -type d -name "katalog-att-radera" -exec rm -rf {} ; för att endast 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 baserat på filändelse

    Nedan visas hur du kan hitta och ta bort alla txt-filer i den aktuella katalogen. Ersätt filändelsen ’txt’ med en annan filändelse, 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 be dig bekräfta innan du tar bort varje fil, lägg till flaggan ’-i’ enligt nedan:

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

    Exempel på utdata:

    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 tar ’-rm’ inte bort kataloger, och du måste använda flaggan ’-r’ för att säkerställa en rekursiv radering. Detta säkerställer radering av tomma kataloger och de som innehåller filer. Flaggan ’-f’ tvingar fram borttagningen och används för både filer och kataloger.

    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 katalogens namn med rätt skiftläge, eller använd flaggan ’-iname’.

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

    Detta tar bort både ’Dir22’ och ’dir22’.

    För att bekräfta innan radering, använd flaggan ’-i’.

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

    Exempel på utdata:

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

    I vårt exempel skrev vi ’n’ för katalogen ’Dir22’, som inte kommer att tas bort, och ’y’ för katalogen ’dir22’ 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:

    find ./ -type f -size 0 | xargs rm -f

    eller:

    find ./ -type f -size 0 -delete

    Hitta och ta bort tomma kataloger

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

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

    Ett annat alternativ är att använda ’-delete’ istället för ’-rmdir’.

    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 viktig data.

    För att undvika oavsiktliga raderingar är det bäst att använda ett användarkonto som inte är ’root’. 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 händer nu?

    Varsågod och prova ovanstående Linux-sökkommandon i din testmiljö eller icke-produktionsmiljö. Se om du kan använda några av dem för att automatisera rensningen av filsystemet med hjälp av Crontab. Och för att bemästra Linux, kolla in den här onlinekursen.