Есть ли более сжатая альтернатива трубопроводу для 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 в любом случае, если вы не хотите рекурсивных результатов.

  • Как я могу запретить доступ в Интернет ко всем процессам, кроме избранных?
  • Проблемы с зависимой винной проблемой на Xubuntu
  • Приоритет интерфейса в лице VPN
  • Установка OpenVPN для замены Cisco VPN, потому что Cisco не будет работать с ядром, на котором я включен или понижен?
  • пересылка веб-трафика через vps, работающий на Ubuntu в другой стране
  • Как решить эту ошибку ядра при запуске ОС?
  • Анализ файлов CSV для добавления пользователей
  • Как включить вывод во время выбора debian / ubuntu
  • Репозитории Ubuntu PPA можно использовать на Debian?
  • Ubuntu 16.04 зависает случайно
  • Клавиша Alt + tab не работает в клиенте NX для Linux
  • Interesting Posts

    Разделение упорядоченного списка в подсписках

    Почему «ключевое слово grep» заставляет терминал стоять вечно?

    Может сохранить историю команд стрелки для ох-my-zsh сузить историю по параметрам / параметрам, указанным в команде

    Как я могу программировать vncserver для автоматической настройки моих оболочек для меня?

    Почему не найдено сопоставление файлов, если перед ними стоит звездочка (*)?

    настройка локальной почты для отладки заданий root cron в debian

    Проблемы NetworkManager в Arch Linux

    Проблема аутентификации HTTPS: Polipo

    Как разбить файл, используя границы ключевых слов

    "W | хвост "отбивает текст с правым краем (78 символов)

    Печать через сервер Samba без записи пароля в виде открытого текста

    Исправление X11 для удаления буфера обмена SELECTION

    Клиент и сервер Openvpn не могут пинговать друг друга (соединение установлено)

    Альтернатива команде cp, поскольку cp выдает предупреждения и возвращает код ошибки при использовании с NFS

    Могу ли я обновить свое ядро ​​Linux с 2.6.32 до 3.0.7?

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