Про команду find у Linux

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

Загальний синтаксис

find [шлях] [параметри] [умови] [дії]
  • шлях: Вказує початковий каталог для пошуку. Може бути один або кілька шляхів. Якщо шлях не вказаний, пошук виконується в поточному каталозі.
  • параметри: Опції, які налаштовують поведінку команди find (наприклад, обмеження глибини пошуку).
  • умови: Критерії, які визначають, що саме шукати (наприклад, ім’я файлу, тип файлу, розмір, права доступу тощо).
  • дії: Операції, які будуть виконані над знайденими файлами (наприклад, відображення на екрані, видалення, копіювання тощо).

Основні параметри та опції

  1. -name: Пошук файлів за іменем. Використовує символи підстановки (*, ?, []).

    find /path/to/search -name "filename.txt"
    
  2. -iname: Те саме, що й -name, але без урахування регістру.

    find /path/to/search -iname "filename.txt"
    
  3. -type: Пошук за типом файлу. Тип може бути:

    • f: звичайний файл.
    • d: директорія.
    • l: символічне посилання.
    • c: спеціальний символ.
    • b: спеціальний блок.
    • p: іменований канал (FIFO).
    • s: сокет.
    find /path/to/search -type f
    
  4. -size: Пошук файлів за розміром. Формати розміру:

    • c: байти.
    • k: кілобайти.
    • M: мегабайти.
    • G: гігабайти.
    • +: більше зазначеного розміру.
    • -: менше зазначеного розміру.
    find /path/to/search -size +10M
    
  5. -mtime, -atime, -ctime: Пошук за часом зміни (-mtime), доступу (-atime) або зміни атрибутів (-ctime). Вимірюється в днях.

    • -mtime -n: змінювались менше ніж n днів тому.
    • -mtime +n: змінювались більше ніж n днів тому.
    • -mtime n: змінювались рівно n днів тому.
    find /path/to/search -mtime -7
    
  6. -perm: Пошук за правами доступу.

    find /path/to/search -perm 644
    
  7. -user, -group: Пошук файлів, що належать конкретному користувачу або групі.

    find /path/to/search -user username
    
  8. -exec: Виконання команди над кожним знайденим файлом. {} замінюється на ім’я файлу, \; вказує на кінець команди.

    find /path/to/search -name "*.log" -exec rm {} \;
    
  9. -maxdepth і -mindepth: Обмеження глибини пошуку.

    • -maxdepth n: обмежує пошук до n рівнів каталогів.
    • -mindepth n: починає пошук з n рівня каталогів.
    find /path/to/search -maxdepth 2 -name "*.txt"
    
  10. -prune: Виключає певні каталоги з пошуку.

    find /path/to/search -path "/path/to/search/exclude_dir" -prune -o -name "*.txt" -print
    

Приклади використання

  1. Пошук файлів з певним розширенням:

    find /home/user/Documents -name "*.pdf"
    
  2. Пошук файлів, змінених за останні 2 дні:

    find /var/log -mtime -2
    
  3. Пошук файлів розміром більше 100 МБ і їх видалення:

    find /home/user/Videos -size +100M -exec rm {} \;
    
  4. Пошук усіх порожніх файлів:

    find /path/to/search -type f -empty
    
  5. Пошук усіх директорій з правами 755:

    find /path/to/search -type d -perm 755
    

Висновок

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