Есть ли более сжатая альтернатива трубопроводу для wc для подсчета файлов в каталоге

Если я делаю ls -1 target_dir | wc -l ls -1 target_dir | wc -l , я получаю количество файлов в каталоге. Я нахожу это немного громоздким. Есть ли более элегантный или лаконичный способ?

5 Solutions collect form web for “Есть ли более сжатая альтернатива трубопроводу для wc для подсчета файлов в каталоге”

Предполагая bash 4+ (какая у любой поддерживаемой версии Ubuntu есть):

 num_files() ( shopt -s nullglob cd -P -- "${1-.}" || return set -- * echo "$#" ) 

Назовите его num_files [dir] . dir является необязательным, иначе он использует текущий каталог. Ваша оригинальная версия не учитывает скрытые файлы, поэтому и не делает этого. Если вы хотите это, shopt -s dotglob перед set -- * .

В вашем исходном примере учитываются не только обычные файлы, но и каталоги и другие устройства – если вы действительно хотите только обычные файлы (в том числе символические ссылки на обычные файлы), вам нужно будет их проверить:

 num_files() ( local count=0 shopt -s nullglob cd -P -- "${1-.}" || return for file in *; do [[ -f $file ]] && let count++ done echo "$count" ) 

Если у вас есть GNU find, что-то вроде этого также является опцией (обратите внимание, что это включает скрытые файлы, которые ваша оригинальная команда не выполняла):

 num_files() { find "${1-.}" -maxdepth 1 -type f -printf x | wc -c } 

(change -xtype to -xtype если вы также хотите считать символические ссылки на обычные файлы).

f=(target_dir/*);echo ${#f[*]}

корректно работает для файла с пробелами, символами новой строки и т. д. в имени.

ls – многостолбцы, только если он выводится непосредственно на терминал, вы можете удалить опцию «-1». Вы можете удалить параметр wc «-l», только прочитать первое значение (ленивое решение, которое не должно использоваться для юридических свидетельства, криминальные расследования, критические задачи, тактические операции …).

 ls target | wc 

Если это кратковременность, которую вы испытываете (а не точную правильность при работе с файлами с символами новой строки в своих именах и т. Д.), Я рекомендую просто накладывать wc -l на lc («количество строк»):

 $ alias lc='wc -l' $ ls target_dir|lc 

Как отмечали другие, вам не нужна опция -1 для ls , так как она автоматическая, когда ls пишет в трубу. (Если вы не используете псевдонимы для использования режима столбцов, я видел это раньше, но не очень часто.)

Псевдоним lc весьма полезен в целом, и для этого вопроса, если вы посмотрите на случай «считать текущий каталог», ls|lc примерно так же кратким, как вы можете получить.

До сих пор Аарон – единственный подход, более сжатый, чем ваш собственный. Более правильная версия вашего подхода может выглядеть так:

 ls -aR1q | grep -Ecv '^\./|/$|^$' 

Это рекурсивно перечисляет все файлы, а не каталоги – по одному на строку, включая .dotfiles под текущим каталогом, используя оболочки оболочки, по мере необходимости, для замены непечатаемых символов. grep отфильтровывает любые списки родительских каталогов или .. или * / или пустые строки – поэтому должна быть только одна строка для каждого файла – общее количество, которое grep возвращает вам. Если вы хотите включить дочерние каталоги:

 ls -aR1q | grep -Ecv '^\.{1,2}/|^$' 

Удалите -R в любом случае, если вы не хотите рекурсивных результатов.

  • Не удается связаться с DNS через беспроводной маршрутизатор
  • фильтрация данных на основе разделителя в оболочке
  • Лучший совет по решению для резервного копирования на NAS через WAN
  • Ubuntu зависает при входе в систему после nvidia-prime intel
  • Как исправить прерывистые ошибки «Нет места на устройстве» во время mv, когда у устройства достаточно места?
  • Exim: электронная почта для root игнорирует / etc / aliases и /root/.forward - всегда используется для определения имени домена
  • Как правильно установить Apache, MySQL и PHP на Ubuntu 10.4
  • / usr / bin / время программы C с ввода-вывода не дает результатов
  • Запуск приложения под Tomcat
  • В Ubuntu нет панелей? libcanberra-tk не может открыть файл общих объектов
  • Можно ли отличать идентификатор и идентификатор сеанса от демона?
  • Interesting Posts

    что считаются старыми и мощными командами?

    Разрешить www-data выполнять определенные команды

    Почему я не могу получить пакет gcc-doc на Debian?

    Почему это регулярное выражение находит соответствие для \ x63 с шаблоном

    mpg321 играет слишком быстро, на высокой высоте, через USB Audio

    Что такое столбец STATE команды TOP на Solaris?

    Надежное определение свободной памяти

    Может ли ядро ​​знать, когда файл читается?

    mmcqd зависает и сжигает CPU на встроенном устройстве

    Распределение и конфигурация Linux для тестирования производительности системы

    Является ли xinetd еще лучшим методом, позволяющим нон-корневым демонам прослушивать привилегированные порты?

    Название монтируемого тома в терминале отличается от GUI

    hciconfig -a Время ожидания соединения (110), bluez, btusb – Bluetooth не работает

    Перенаправление локального хоста: порт на внешнийIP: NewPort

    Linux RAID – Superblocks отсутствует на всех дисках после обновления оборудования

    Linux и Unix - лучшая ОС в мире.