Виділіть файли та запустіть 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
має бути частиною звички працювати з файлами, щоб уникнути обробки складних імен файлів. Для отримання додаткової інформації про це читайте есе Як правильно поводитися з іменами