Як порахувати кількість файлів в командному рядку unix-like систем, vr-online - безкоштовний

Сьогодні у мене в голові виник, здавалося б, просте запитання: «Як порахувати кількість файлів / папок в консолі unix-like систем?». З Linux'ом у мене вкрай мало досвіду роботи, тому ось відразу відповідь придумати рішення не зміг (ганьба.). Хотів було вже на все це покласти залізний болт, але моя допитливість взяла своє, і вирішив я підключитися на наш сервер, що працює під FreeBSD. Аж надто захотілося швидких експериментів. Що з цього вийшло - читай далі.

Отже, SSH клієнт завзято моргнув і представив моєму погляду голу консоль бзди. Взагалі, у нас на роботі усіма тваринами (linux'амі) і пекельними створіннями (freebsd) рулить Lord_of_fear. Я знав, що lord неодмінно знає відповідь на питання, що мучило мене питання, але вирішив спробувати дійти до рішення самостійно.

Спочатку я думав, що мою скромну потреба може задовольнити команда ls. Тикав і так і сяк, але, то, що мені, було, потрібно не знайшов. Чому я подумав на ls? Та тому що за допомогою ls видає список файлів і папок запитуваної каталогу в різних уявленнях. Мені як людині з відсутністю належного досвіду здалося логічно, що операція як підрахунок файлів полюбас повинна бути організована. На жаль, я помилився. Ну, нічого, став колупати далі.

А далі було найцікавіше. Я згадав, що є така команда як wc. Для тих хто не в курсі розповідаю. За допомогою wc можна порахувати кількість символів / рядків (ключ l) / байт і т.д. Трохи поворухнувши звивинами, мій мозок згенерував наступне рішення:

Команда тут же виплюнула мені число 22. Експеримент вдався. Я отримав число файлів і каталогів поточної директорії. Мета начебто була досягнута, але тут я вирішив, що було б здорово отримати саме кількість файлів, тобто без урахування директорій. Став знову крутити вертіти комбінацію і докрутили до такого вигляду:

Команда успішно виконалася і показала мені кількість файлів. Про те, як це працює я розповім трохи нижче, а поки продемонструю підрахунок кількості директорій:

Я не помилився, команда знову видала вірний результат. Тепер я був повністю задоволений. Відповідь на питання отримав, але мені все, ж захотілося зробити ще один тест. На цей раз я вирішив порахувати кількість файлів з певним розширенням. Думати вже не довелося. Всього лише змінив команду до виду:

Як і слід було очікувати, в цей раз, команда також виконалася без помилок. Тепер трохи відвернемося і спробуємо розібратися, що ж я тут такого написав. Отже, почнемо з команди ls c параметром l. Сама команда ls в світі Unix призначена для отримання списку файлів / папок певної директорії. Якщо при виклику цієї команди вказати параметр l, то для кожного файлу / папки буде виведена додаткова інформація. Під додатковою інформацією я маю на увазі дату, розмір файлу, права доступу і т.д.

Як порахувати кількість файлів в командному рядку unix-like систем, vr-online - безкоштовний

Приклад виведення інформації за допомогою команди ls з ключем l я показав на малюнку. Придивися уважно до малюнка. Якщо ти не розбираєшся в unix-like системах, то раджу звернути пильну увагу на найпершу колонку. У ній розписані права доступу. Перший символ (-) перед маскою прав означає, що це саме файл. Буква d навпаки, дає нам чітко зрозуміти, що це - каталог. Виходить, для визначення кількості файлів в директорії, нам всього лише потрібно порахувати рядки, виведені за допомогою команди ls -l, у яких перший символ тире (-).

Для вирішення цього завдання я використовую команду grep. Саму команду grep я викликаю в тому ж рядку, де і ls. Після команди ls -l я вказую символ |, який означає, що результат виконання команди (ls -l) потрібно передати в якості параметра для команди, зазначеної після вертикальної риски. Сподіваюся, з цим моментом все зрозуміло. Рухаємося далі.

Сама команда grep призначена для здійснення пошуку тексту в файлах. У нашому випадку ця команда буде використовуватися для відбору рядків, які починаються з символу (-). Ми знаємо, що пошук потрібно виробляти саме спочатку рядки (тобто перевіряти саме перший символ), а раз так, то введемо для grep уточнення. У світі unix-like зроблено все дуже гнучко і було б дивним, якщо в grep була відсутня підтримка регулярних виразів. Вона є, і гріх їй не скористатися. Для вирішення цього завдання скористаємося конструкцією: ^ -. Ті, хто ще не починав вчити регулярки, пояснюю. Цей вислів говорить про те, що першим символом повинен бути саме -. Таким же алгоритмом я користуюся для підрахунку кількості директорій. Тільки на цей раз замість символу -, я вказую букву d (directory). Думаю, про приклад з підрахунком кількості файлів з розширенням php вже пояснювати не потрібно.

Ось так просто можна порахувати кількість файлів / папок в жахливій і страшною консолі unix-like систем. Успіхів!

Цитувати ls -l | grep php | wc -l
А чи не простіше:
ls -l * .php | wc -l
Навіщо викликати grep, коли цю ж операцію можна виконати за допомогою ls?

Схожі статті