40 найкращих прикладів команди Find у Linux

Команда Linux find — це потужний інструмент, який дозволяє системним адміністраторам знаходити та керувати файлами та каталогами на основі широкого діапазону критеріїв пошуку. Він може знаходити каталоги та файли за їх назвою, типом або розширенням, розміром, дозволами тощо.

Окрім пошуку файлів і каталогів, комбінування команди find з іншими дає змогу виконувати дії з результатами. Додавання параметра -exec дозволяє системним адміністраторам запускати зовнішні команди та виконувати такі дії, як копіювання, переміщення, видалення або зміна дозволів для файлів, які відповідають заданим критеріям, таким як розмір, ім’я тощо.

У цій статті ми почнемо з пояснення основних команд пошуку Linux на прикладах. Це покаже вам, як знаходити файли та каталоги. Потім ми покажемо вам, як використовувати параметр -exec, щоб діяти з файлами чи каталогами залежно від їх розміру, дозволів тощо.

Загальний синтаксис команди find такий

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

Де,

  • шлях визначає каталог.
  • ім’я файлу або каталог для пошуку : ім’я файлу або каталогу, які потрібно шукати
  • дії, які необхідно виконати: наприклад, копіювати, видалити, перемістити тощо.

У цьому підручнику ми пояснимо, як знайти файли та каталоги, що відповідають заданим шаблонам. Ми також побачимо, як виконувати дії з файлами або каталогами, які знаходить команда find. Посібник заснований на Ubuntu, але застосовний до більшості дистрибутивів і версій Linux.

Пошук файлів і каталогів

Зміст

Знайдіть певні файли за назвою або розширенням

Щоб знайти певний файл, виконайте таку команду з кореня (/). Команда містить точну назву файлу, який ви шукаєте.

find . -name file22.txt

Вихід

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

Зверніть увагу, що результати містять шлях. Це важливо, якщо ви не знаєте каталог, де знаходиться файл, або коли він знаходиться в кількох місцях.

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

find ./test -name file22.txt

Пошук певних файлів в іншому каталозі

У нашому випадку ми будемо шукати всі ті, що починаються з файлу letters, у тестовому каталозі.

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.

  Як використовувати команду dig в Linux

Якщо ми запустимо команду;

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

Знайти кілька файлів з різними розширеннями з усіх каталогів

Ви можете використовувати команду find, щоб знайти кілька файлів із різними розширеннями, як-от *.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

Знайти файли, що містять певний текст

Іноді ви хочете отримати доступ до файлу, який містить певний текст, але не можете згадати його назву чи розташування. Ця команда дозволяє знайти всі файли, що містять цільовий текст.

Щоб знайти всі файли, що містять слово hyperconvergence”, використовуйте;

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 Мб

Для пошуку знайдіть усі файли розміром 30 Мб

find / -size 30M

Знайти файли, розмір яких перевищує вказаний

find -size +2M

Вихід

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

Знайти файли менше 10 МБ у поточному каталозі

find . -type f -size -10M

Знайдіть файли розміром від 100 до 200 МБ

Під час пошуку файлів у певному діапазоні, наприклад від 100 до 200 МБ

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

Шукайте каталоги розміром понад 20 Кб

знайти / -тип d -розмір +20k

Знайдіть порожні файли та каталоги.

Файли

знайти ./ -тип f -розмір 0

або

find ./ -type f –empty

Довідники

find ./ -type d –empty

Пошук файлів за віком або часом зміни

Знайти файли старше n днів

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

Параметр -mtime +8 шукатиме текстові файли, вік яких перевищує 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 тощо.

  Як комфортно користуватися ПК з Linux вночі за допомогою диммера для робочого столу

Ви можете вказати режим трьома різними способами.

  • Без префікса, коли ви хочете знайти файли з точними вказаними дозволами.
  • З «-» для файлів із принаймні вказаним дозволом. Це повертає файли з указаними, а також додатковими вищими дозволами.
  • Використання «/» вимагає вказівки власника або групи з дозволом на файл.
  • Знайти файли з дозволом 777

    find -perm 777

    Вихід

    ./file1

    Знайдіть файли з принаймні 766
    знайти -перм -766

    Вихід

    ./file2
    ./file1

    Команда шукає всі файли, у яких

    • Власник файлу має дозволи на читання/запис/виконання.
    • Група має дозволи на читання/запис
    • Інші мають дозвіл на читання/запис

    Таким чином, він повертає два файли, які відповідають цьому критерію – файл1 і файл2. Файли не повинні мати точні дозволи 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

    Знайдіть результати та дійте відповідно до них

    У цьому розділі ми розглянемо, як ви можете діяти з файлами, які відповідають шаблону, указаному в команді find.

    Знайдіть файли та змініть дозволи

    Знайти та змінити дозволи для певних типів файлів. У нашому випадку ми будемо працювати з файлами 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

      Як розмістити ігровий сервер Linux Xonotic

    Зверху ми бачимо, що кореневий каталог і каталоги документів мають 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 на інше розширення, наприклад 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 для каталогу dir22, який тепер буде видалено.

    Знайдіть і видаліть порожні файли

    Ви можете використовувати будь-яку з наведених нижче команд, щоб знайти порожні файли та видалити їх автоматично.

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

    або
    знайти ./ -тип f -розмір 0 | xargs rm -f
    або
    find ./ -type f -size 0 –delete

    Знайдіть і видаліть порожні каталоги

    Щоб видалити порожні каталоги, ми скористаємося опцією d.

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

    Іншою альтернативою є використання видалення замість видалення.

    find ./ -type d -empty -delete

    Зверніть увагу, що видалення системних або критичних файлів із комп’ютера може пошкодити операційну систему чи програми або призвести до втрати важливих даних.

    Щоб уникнути випадкового видалення, найкраще використовувати обліковий запис без root. Також переконайтеся, що ви видаляєте правильні файли, які не є корисними, і що у вас є резервна копія всіх ваших файлів даних про всяк випадок.

    Що далі?

    Спробуйте наведені вище команди пошуку Linux у вашій лабораторії чи середовищі НЕВИРОБНИЧОГО. Подивіться, чи можна використовувати деякі з них для автоматизації очищення файлової системи за допомогою Crontab. А щоб освоїти Linux, перегляньте це онлайн курс.