Команда find в Linux і як вона допомагає відображати читабельні розміри файлів
08:39, 07.06.2024
Find - досить ефективний метод в операційній системі Linux, необхідний для пошуку каталогів/файлів за певними атрибутами. Коли мова йде про розмір файлів, результати за замовчуванням можуть бути не дуже зрозумілими для користувачів.
Щоб змінити цю ситуацію і отримати більш зрозумілий результат, ми вирішили поділитися власним досвідом у цій сфері. У цій ситуації ми допоможемо поєднати команди find з іншими командами, що значно спростить процес пошуку.
У цій статті ми поділимося деякими з найбільш корисних комбінацій команд, які можуть дати результати, що відповідають людському сприйняттю. Якщо ця тема вас зацікавила, давайте розглянемо декілька прикладів.
Дія -printf команди у поєднанні з find
За допомогою команди find можна шукати файли за розміром, дозволом, власником, типом, назвою та іншими параметрами. Коли ми застосовуємо іншу команду, а саме -printf, вона виводить інформацію про конкретні знайдені файли. Для того, щоб отримати інформацію про розмір файлу, вам слід застосувати такі специфікатори, як %s.
Ось як повинна виглядати ця команда:
$ find /pathtodirectory -type f -printf "%s %p\n"
При використанні %s ви отримуєте вивід у байтах. У цьому випадку будуть виведені номери в байтах і назви файлів після них. Для отримання більш зручної для читання інформації, наприклад, у кілобайтах, замість стандартного варіанту, скористайтеся наступною командою:
$ find /pathtodirectory -type f -printf "%k KB %p\n"
Використовуючи %k, ви вказуєте критерій пошуку у кілобайтах. Перш ніж використовувати будь-який з наведених прикладів, перевірте, чи підходить він для вашої операційної системи, оскільки ця команда може працювати дещо по-різному у різних системах Unix.
Команда du в дії
Ще одним чудовим варіантом є використання команди du разом з командою find. Du вже встановлена в усіх системах Linux, тому вам не потрібно витрачати додатковий час на процес встановлення. Ось приклад використання цієї команди:
$ find /pathtodirectory -type f -exec du -h {}+
Тепер давайте спробуємо розібратися, які команди тут були використані. Частина -type f шукає всі файли у визначеному каталозі. -exec виконує наступну команду, символ плюс дозволяє шукати декілька імен файлів, а фігурні дужки використовуються для виведення всіх необхідних даних у вигляді списку.
Для показу всіх файлів у мегабайтах можна також використовувати команду du. Однак у цьому випадку файли, розмір яких менше 1 МБ, будуть показані так, як якщо б вони мали один мегабайт. Командний рядок матиме такий вигляд:
$ find /pathtodirectory -type f -exec du -m {}+
Ви можете використовувати цю команду і отримати достовірні результати лише для файлів розміром 1 МБ і більше.
Якщо вам потрібна така інформація лише про каталоги, ви також можете скористатися цією ж командою. Ось як вона виглядає:
$ find /pathtodirectory -maxdepth 1 -type d -exec du --max-depth=1 -h {}+
Використовуючи цей рядок, ви шукатимете всі каталоги у шляху, який ви вкажете одразу після find. З параметром maxdepth шукатимуться лише каталоги у вибраній теці. Останнє число у результатах показує загальний розмір усіх каталогів.
Визначення розмірів файлів за допомогою ls
Ls - типова команда Linux, яка потрібна для виведення списку каталогів/файлів. Для виведення розмірів файлів у зручному для користувача вигляді можна скористатися наступним рядком:
$ find /pathtodirectory -type f -exec ls -lh {}+
У цій послідовності ls -lh відповідає за показ усіх елементів кожного файлу, включно з характеристиками розміру. Щоб зробити цей рядок більш конкретним і показати розмір у кілобайтах (його також можна використовувати для мегабайтів і байт), скористайтеся наступним прикладом:
$ find /pathtodirectory -type f -exec ls -l --block-size=KB {}+
Якщо вам потрібна більш структурована інформація про розміри файлів, ви можете показати їх у порядку спадання/зростання. Це можна зробити за допомогою наступного рядка:
$ find /pathtodirectory -type f -print0 | xargs -0 ls -lS --block-size=KB
На виході буде показано результати у порядку спадання.
Розширена фільтрація за допомогою grep
Для розширеної фільтрації найчастіше використовується команда grep , за допомогою якої ви можете вибрати потрібний шаблон, і всі показані послідовності будуть містити саме цей шаблон. Для ілюстрації наведемо команду, яка покаже тільки файли, що мають розмір MB:
$ find /pathtodirectory -maxdepth 1 -type f -exec du -h {}+ | grep -E '\b[0-9]+M\b'
У цьому рядку \b використовується як специфічна межа, що означає, що M буде шукатися як частина розміру, але не інакше. Для звуження критеріїв пошуку ви можете скористатися тією ж командою і додати потрібне ключове слово. Рядок має виглядати так:
$ find /pathtodirectory -type f -exec du -h {}+ | grep 'ключове слово'
Сортування та уточнення результатів
Якщо ви хочете відсортувати файли за їх розмірами, є декілька варіантів, і тут ми запропонуємо вам декілька прикладів використання команди sort для цієї мети.
$ find /pathtodirectory -maxdepth 1 -type f -exec du -h {}+ | sort -h -k1
У цьому рядку, як і в більшості згаданих вище, ми використовуємо du, щоб отримати розміри, зручні для читання. За допомогою характеристики -k1 ми уточнюємо, що фільтрація має відбуватися в залежності від початкового поля кожного рядка. За замовчуванням сортування відбувається за зростанням, але з додаванням -r ви також можете отримати результати за спаданням. Ось як це має виглядати:
$ find /pathtodirectory -maxdepth 1 -type f -exec du -h {}+ | sort -rh -k1
Ми можемо піти ще далі в пошуку і вказати точний розмір файлу, який нам потрібен, або нижче/вище певного діапазону. Наприклад, давайте знайдемо онлайн файли, розмір яких менше 30 МБ:
$ find /pathtodirectory -maxdepth 1 -type f -size -30M -exec du -h {}+
Для пошуку результатів, розмір яких перевищує 30 мегабайт, ви можете просто змінити мінус на плюс. Якщо вам потрібні файли, які мають конкретний розмір, а не більший чи менший, вам просто потрібно прибрати +/- перед числом мегабайт.
Ще одна річ, яку можна зробити за допомогою команди сортування - показати результати у порядку спадання/зростання, це можна зробити, як у наступному рядку:
find /pathtodirectory -maxdepth 1 -type f -size +30k -exec du -h {}+ | sort -h -k1
Підсумки
У цій статті ми намагалися поділитися нашими практичними знаннями в цій галузі і запропонувати реальні приклади того, як можна використовувати команду find для відображення результатів пошуку в більш зрозумілому і читабельному для людини вигляді. За замовчуванням користувач отримує результати в байтах, що не завжди зручно, а також ускладнює їх правильну інтерпретацію.
Для отримання більш настроюваних результатів пошуку є кілька хороших варіантів, таких як ls, grep, du та інші. Завдяки використанню зручних для користувача результатів стало набагато простіше отримувати кращу відповідь. У вас є чудова можливість перевірити все, що ви щойно вивчили в теорії, реалізація цих команд не складе труднощів навіть для нових користувачів.