Виділіть файли та запустіть wc на них
Що wc -l /etc/*робити, це *розшириться на всі елементи всередині /etc/каталогу. Таким чином, мета - ізолювати файли та виконувати wcїх. Існує кілька способів зробити це.
для циклу з тестом
testКоманда, або частіше скорочено [можна використовувати , щоб знайти елемент , чи є звичайним файлом наступним чином:
[ -f "$FILE" ]
Таким чином, ми можемо зробити ітерацію над усіма елементами в /etc/і запустити wcїх, якщо і лише тоді, коли вищевказана команда поверне справжнє значення. Так:
for i in /etc/*; do [ -f "$i" ] && wc -l "$i" ; done
знайти
Ми також можемо використовувати findз -maxdepth, -typeі -execпрапорами
find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepthповідомляє знайти, наскільки глибоко в структурі каталогів йти; значення 1 означає лише файли в каталозі, який ми хочемо.
-type f вказує шукати звичайні файли, АБО (представлені -oпрапором) для символічних посилань (представлених type l). Все це добро укладається в дужки, ()уникнуті \так, що оболонка інтерпретує їх як частину findкоманди, а не щось інше.
-exec COMMAND {} +Структура тут запускає будь-яку команду, яку ми даємо, +вказуючи взяти всі знайдені файли та заповнити їх як аргументи командного рядка до КОМАНДИ.
Щоб отримати загальний обсяг, ми могли б створити tailподібний результат
$ find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} + | tail -n 1
[sudo] password for xieerqi:
11196 total
Побічна примітка
Простіше просто використовувати wc -l /etc/* 2>/dev/null | tail -1, як у відповіді Л.Д. Джеймса, однак findмає бути частиною звички працювати з файлами, щоб уникнути обробки складних імен файлів. Для отримання додаткової інформації про це читайте есе Як правильно поводитися з іменами