40 най-добри примера за команда Find в Linux

Командата намиране на Linux е мощен инструмент, който позволява на системните администратори да намират и управляват файлове и директории въз основа на широк набор от критерии за търсене. Може да намира директории и файлове по тяхното име, тип или разширение, размер, разрешения и т.н.

Освен локализирането на файлове и директории, комбинирането на командата find с други ви позволява да предприемете действие върху резултатите. Добавянето на опцията -exec позволява на системните администратори да изпълняват външни команди и да извършват действия като копиране, преместване, изтриване или промяна на разрешенията на файловете, отговарящи на зададените критерии като размер, име и др.

В тази статия ще започнем с обяснение на основните команди за намиране на Linux с примери. Това ще ви покаже как да намирате файлове и директории. След това ще ви покажем как да използвате опцията -exec, за да действате върху файловете или директориите въз основа на техния размер, разрешения и т.н.

Общият синтаксис за командата find е

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

Където,

  • пътят указва директорията.
  • име на файл или директория за търсене : Име на файла или директорията, които да търсите
  • действие за предприемане: като копиране, изтриване, преместване и др.

В този урок ще обясним как да намирате файлове и директории, съответстващи на определени шаблони. Ще видим също как да извършваме действия върху файловете или директориите, които намира командата find. Ръководството е базирано на Ubuntu, но е приложимо за повечето дистрибуции и версии на Linux.

Съдържание

Намерете файлове и директории

Намерете конкретни файлове по име или разширение

За да потърсите конкретен файл, изпълнете следната команда от root (/). Командата съдържа точното име на файла, който търсите.

find . -name file22.txt

Изход

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

Моля, имайте предвид, че резултатите включват пътя. Това е важно, ако не знаете директорията, където се намира файлът, или когато е на повече от едно място.

Можете също да търсите файла в друга директория, докато все още сте в текущото местоположение. В този случай трябва да предоставите пътя за директорията, в която искате да търсите.

find ./test -name file22.txt

Търсене на конкретни файлове в друга директория

В нашия случай ще търсим всички, които започват с файла с букви в тестовата директория.

find ./test -name file*

Изход

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

Търсене на файлове по разширение

За да намерите файл в Linux с определено разширение, добавете го към командата.

find . -name *.txt

Изход

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

Намерете файлове и директории по име

Използвайте командата по-долу, за да търсите файлове и директории, започващи с буквите qa. В нашия компютър имаме файловете qatree.txt и qa.txt, както и директория с името qa.

  Как да стартирате софтуера на Windows на Linux по-лесно с Bottles

Ако изпълним командата;

find ./ -name "qa*"

Той връща следния изход

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

Командата връща както файловете, така и директориите, отговарящи на критериите за търсене. За да намерите само файлове или директории, трябва да посочите това в командата.

Намерете само файлове или директории

Само за файлове използвайте превключвателя тип f.

Само файлове

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

Изход

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

Само директории

Добавете опцията тип d, за да намерите само директории.

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

Изход

./home/qa

Команда за намиране без значение на главни и малки букви

Всички търсения с превключвател -name са чувствителни към малки и големи букви и няма да дадат резултати с главни букви. За да получите всички случаи, използвайте опцията -iname.

find ./ -iname "qa*"

Изход

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

Търсене на файл от множество директории

За да намерите файловете в различни директории, добавете техните пътища в командата. В нашия случай ще проверим в тестовите и цифровите директории.

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

Изход

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

Намерете множество файлове с различни разширения от всички директории

Можете да използвате командата за намиране, за да намерите множество файлове, които споделят различни разширения като *.doc, *.txt *.pdf и т.н. Това може да се направи поотделно, едно разширение наведнъж или като се използва само една команда, която включва всички желаните разширения.

намирам . -type f ( -name “*.txt” -o -name “*.pdf” -o -name “*.doc”)

изход

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

Намерете файлове, съдържащи определен текст

Понякога искате да получите достъп до файл, съдържащ определен текст, но не можете да си спомните неговото име или местоположение. Тази команда ви позволява да намерите всички файлове, съдържащи вашия целеви текст.

За да потърсите всички файлове, съдържащи думата хиперконвергенция”, използвайте;

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

Изход

/root/numeric/hci
/root/HCIP

Опцията –i позволява на командата да игнорира регистъра и ще намери текста, независимо дали е с главни букви или не, т.е. хиперконвергенция, хиперконвергенция и т.н.

За да търсите файловете в определена директория, просто ги добавете към командата

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

Изход

./numeric/hci

Разгледайте още примери за команда grep.

Намерете файлове и директории въз основа на размера

Можете да намерите всички файлове или директории, които са по-малки, равни или по-големи от определен размер, в рамките на определен диапазон или празни. Използвайте подходящ формат за размер в зависимост от типа файлове или директории, които търсите.

Опциите за размер включват;

c – байтове

k – килобайта

M – мегабайти

G – гигабайти

Намерете файлове с определен размер – равен на 30 MB

За да търсите, намерете всички 30MB файлове

find / -size 30M

Намерете файлове, по-големи от определен размер

find -size +2M

Изход

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

Намерете файлове под 10MB в текущата директория

find . -type f -size -10M

Намерете файлове с размери между 100-200 MB

Когато търсите файлове в определен диапазон, например между 100 и 200 MB

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

Търсете директории, по-големи от 20kb

намери / -тип d -размер +20k

Намерете празни файлове и директории.

файлове

намери ./ -тип f -размер 0

или

find ./ -type f –empty

Справочници

find ./ -type d –empty

Намерете файлове по възраст или време на модификация

Намерете файлове, по-стари от n дни

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

-mtime +8 ще търси txt файлове, които са по-стари от 8 дни.

По дата на промяна

Това ще търси файлове, модифицирани през последните 17 часа

find . -mtime -17 -type f 

Търси директории, променени през последните 10 дни

find . -mtime -10 -type d 

Намерете файлове въз основа на достъп или модификация

Намерете файлове въз основа на дата или час на достъп. Това ви позволява да видите файлове, които са или не са били достъпвани в рамките на определен период.

За да видите файлове, които не са били достъпвани през последните 10 дни в началната директория.

find /home -atime +10

Файловете са достъпни точно преди 10 дни

find /home -atime 10

Достъп през последните 10 дни

find /home -atime -10

Намерете файлове, променени през последните n дни

Можете също така да търсите файловете в директорията /home, променени през последните 10 дни, като използвате командата;

find /home -mtime -10 

Намерете файлове, променени в рамките на определен период.

Например всички файлове, модифицирани преди 6 и 15 дни в началната директория.

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

Достъп до файлове и директории през последните 10 минути

За да намерите файловете, достъпни през последните 10 минути, използвайте опцията -amin.

find . -amin -10 -type f

Изход

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

Директории, достъпени през последните 10 минути

find . -amin -10 -type d

Намерете файлове, отговарящи на конкретни разрешения

Синтаксис

$ find -perm mode

Където режимът е разрешението, което е или числово като 644, 655, 700, 777 и т.н., или букви като u=x, a=r+x и т.н.

  Как да инсталирате Scribus Publisher на Linux

Можете да зададете режима по следните три различни начина.

  • Без префикс, когато искате да намерите файлове с точно посочените разрешения.
  • С „-“ за файлове с поне указаното разрешение. Това връща файлове с посочените, както и допълнителни по-високи разрешения.
  • Използването на “/” изисква посочване на собственика или групата с разрешение за файла.
  • Намерете файлове с разрешение 777

    find -perm 777

    Изход

    ./file1

    Намерете файлове с поне 766
    намери -perm -766

    Изход

    ./file2
    ./file1

    Командата търси всички файлове, в които

    • Собственикът на файла има разрешения за четене/запис/изпълнение.
    • Групата има разрешения за четене/запис
    • Други имат разрешение за четене/запис

    Като такъв той връща два файла, които отговарят на този критерий – file1 и file2. Не е необходимо файловете да имат точните разрешения 766 и могат да имат допълнителни такива, но трябва да имат поне посочените.

    Намерете файлове, които могат да се записват от собственика

    Сега ще използваме „/“, за да търсим файлове, които могат да бъдат записвани от техния собственик, група или други.

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

    Горното търси файлове, които могат да се записват от техния собственик или група.
    Това връща файлове, които могат да се записват от единия, но не непременно и от двата. За да видите файлове, където и двата имат разрешения за запис, използвайте префикса –.

    find -perm -220

    Изход

    ./file2
    ./file1

    Намерете файлове, притежавани от потребител

    Намерете всички файлове, притежавани от Джак

    find /home -user jack

    Изход

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

    Намерете конкретни файлове, притежавани от потребител

    Намерете всички текстови файлове, притежавани от Джак

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

    Изход

    /home/jack/docs/file32.txt

    Намерете и избройте файлове и директории заедно с техните разрешения

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

    Изход

    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

    Намерете и действайте според резултатите

    В този раздел ще разгледаме как можете да действате върху файловете, които отговарят на шаблона, зададен в командата за намиране.

    Намерете файлове и променете разрешенията

    Намиране и промяна на разрешения за определени типове файлове. В нашия случай ще работим с PHP файлове с различни разрешения, както е показано по-долу.

    [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

    Сега ще потърсим всички PHP файлове (по-горе) и ще заменим разрешенията им със 755

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

    Командата търси PHP файлове в директорията ver и след това задава тяхното разрешение на 755 (rwxr-xr-x)

    Резултати

    [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

    Намерете и променете разрешенията за файлове и директории

    Намерете файлове с 644 разрешения и ги променете, за да имат 655 разрешения

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

    Можете също да търсите директории с 644 разрешения и да замените това със 755.

    find . -type d -perm 644

    Изход

    ./docs   

    Папката с документи има 644 разрешения

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

    За да го настроим на 755, стартираме

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

    Сега можем да проверим отново, за да видим какво точно е 755

    find . -type d -perm 755

    Изход
    .
    ./docs

      Как да използвате командата vmstat в Linux

    Отгоре можем да видим, че директориите root и docs имат 755 разрешения.

    Командата Ls –la дава следните подробности

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

    Намерете и копирайте файлове или директории

    Намерете и копирайте конкретен файл в директория

    Командата по-долу ще намери файла file22.txt и ще го копира в директорията ~/tmp/images.

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

    Намерете и копирайте един тип файлове в директория

    За да намерите файлове като изображения с разширение jpg в текущата директория и да ги копирате на друго място като папка с изображения, използвайте;

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

    Това ще намери и копира всички jpg файлове в папката ~/tmp/images.

    Намерете и копирайте един файл в много директории

    Намерете и копирайте една в няколко директории.

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

    Това ще намери файла hci файл и ще го копира в трите директории на /tmp/dir1/ /tmp/dir2/ и $HOME/3/

    Намерете и преместете файлове в друга директория

    За да преместите познат файл от директория в друга. За да преместите файла universal.php;

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

    Търсете и премествайте файлове с определено разширение в друга папка

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

    Намерете определени файлове и преместете в конкретна различна папка

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

    Командата търси всички файлове с имена, започващи с uni и имащи разширение. След това ги премества в директорията /unifiles/

    Намерете и преместете файлове според възрастта

    Намерете и преместете файлове, по-стари от посочените дни, на друго място, като например архив.

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

    Това ще търси pdf файлове, по-стари от 20 дни, и ще ги премести в директорията backup1.

    Намерете и изтрийте файлове и директории

    Синтаксисът за намиране и премахване на файлове или директории в текущата директория е

    намирам . -type f -name “файл за изтриване” -exec rm -f {} ; за изтриване само на файлове или

    намирам . -type d -name “dir-to-delete” -exec rm -rf {} ; само за изтриване на директории

    Намерете и изтрийте само определени файлове

    За да намерите и изтриете файлове, започващи с til, използвайте;

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

    За намиране и изтриване на директории, започващи с til

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

    Премахнете файловете и директориите

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

    Това ще премахне както файлове, така и директории, започващи с буквите til.

    Изтриване чрез разширение

    По-долу е описано как можете да намерите и изтриете всички txt файлове в текущата директория. Заменете txt с друго разширение като bak, pdf или всяко друго, което искате да премахнете.

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

    В случай, че искате системата да ви подкани да потвърдите, преди да изтриете всеки файл, добавете опцията -i, както е показано по-долу.

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

    Изход

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

    По подразбиране -rm няма да премахне директориите и трябва да използвате опцията –r, за да осигурите рекурсивно премахване. Това гарантира изтриването на празни директории и тези, съдържащи файлове. Опцията -f принуждава премахването и се използва както за файловете, така и за директориите.

    Намерете и изтрийте файлове, по-стари от n дни

    Намерете и изтрийте архивни файлове, по-стари от 20 дни, от текущата директория.

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

    Това ще изтрие всички .bak файлове, по-стари от 20 дни.

    Намиране и изтриване само на директории

    За да изтриете директория, наречена dir22

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

    Уверете се, че главните букви в името на директорията съответстват или използвайте опцията -iname.

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

    Премахва както Dir22, така и dir22

    За да потвърдите преди изтриване, използвайте опцията -i.

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

    Изход
    rm: премахване на директория ‘./Dir22’? н
    rm: премахване на директория ‘./dir22’? г

    В нашия случай въведохме n за директория Dir22, която няма да бъде изтрита, и y за директория 22, която сега ще бъде премахната.

    Намерете и премахнете празни файлове

    Можете да използвате някоя от следните команди, за да намерите празни файлове и да ги изтриете автоматично.

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

    или
    намери ./ -тип f -размер 0 | xargs rm -f
    или
    намери ./ -тип f -размер 0 –изтриване

    Намерете и премахнете празни директории

    За премахване на празни директории ще използваме опцията d.

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

    Друга алтернатива е да използвате изтриване вместо премахване.

    find ./ -type d -empty -delete

    Моля, обърнете внимание, че изтриването на системни или критични файлове от вашия компютър може да повреди операционната система или приложенията или да доведе до загуба на вашите важни данни.

    За да избегнете случайни изтривания, най-добрата практика е да използвате не-root потребителски акаунт. Освен това се уверете, че изтривате правилните файлове, които не са полезни, и че имате резервно копие на всичките си файлове с данни за всеки случай.

    Какво следва?

    Продължете и опитайте горните команди за намиране на Linux във вашата лаборатория или НЕПРОИЗВОДСТВЕНА среда. Вижте дали можете да използвате някои за автоматизиране на почистването на файловата система с Crontab. И за да овладеете Linux, вижте това онлайн курс.