Подсчитать количество файлов в каталоге в Linux?

Чтобы подсчитать количество файлов в каталоге, я обычно использую

ls directory | wc -l

Но есть ли другая команда, которая не использует wc?


person Kantura    schedule 03.01.2014    source источник
comment
В чем именно проблема с wc, которая мешает вам его использовать?   -  person vanza    schedule 03.01.2014
comment
Не совсем. Команды Unix обычно предназначены для использования таким образом, в цепочке каналов.   -  person Michael Berkowski    schedule 03.01.2014
comment
Я подключаюсь через ssh к другому хосту для доступа к некоторым данным. К сожалению, некоторые основные команды не работают на этом хосте. Если я использую wc, он возвращает нераспознанную команду. Поэтому ищу другие варианты.   -  person Kantura    schedule 03.01.2014
comment
Используйте команду tree. Это даст вам дерево и внизу расскажет, сколько файлов и каталогов есть. Если вы хотите, чтобы скрытые файлы также использовали tree -a.   -  person Elijah Lynn    schedule 04.03.2015
comment
@vanza В чем проблема с wc , что если в имени файла есть \n? Да, крайне маловероятно! Но все еще технически допустимо и возможно.   -  person JamesThomasMoon    schedule 26.06.2015
comment
Файлы @vanza UPDATE с \n в имени отображаются в одной строке по ls . \n заменяется на ? . Интересно.   -  person JamesThomasMoon    schedule 26.06.2015
comment
Возможный дубликат stackoverflow .com/questions/11307257/   -  person tripleee    schedule 27.11.2017
comment
Если вы хотите включить файлы подпапок путем рекурсивного подсчета: stackoverflow.com/a/9157162/1176454   -  person baptx    schedule 31.01.2019
comment
Помните -R для рекурсивного   -  person PYK    schedule 14.09.2020


Ответы (1)


это один:

ls -l . | egrep -c '^-'

Примечание:

ls -1 | wc -l

Что означает: ls: список файлов в каталоге

-1: (это ОДИН) только одна запись в строке. Измените его на -1a, если вы тоже хотите скрытые файлы

|: вывод трубы на...

wc: "количество слов"

-l: считать lines.

person Sajad Karuthedath    schedule 03.01.2014
comment
спасибо Sajad Lfc, но команда egrep возвращает 0, а команда wc возвращает правильное количество файлов. Также команда wc работает без включения -1. - person Kantura; 03.01.2014
comment
Нет, подождите . Я сделал бубу. Вы абсолютно правы Sajad Lfc. лс -1 дир | egrep -c '' Это возвращает количество файлов в каталоге. Спасибо . - person Kantura; 03.01.2014
comment
@SajadKaruthedath ls -l . | egrep -c '^-' не считает скрытые файлы. Я предлагаю добавить флаг -a к ls. - person JamesThomasMoon; 26.06.2015
comment
@JamesThomasMoon1979: пожалуйста, проверьте мое описание - person Sajad Karuthedath; 26.06.2015
comment
Это показывает ошибку, когда в папке нет файлов. Используйте 1_. Здесь вывод ls направляется в /dev/null, а результат — чистый ноль. - person Sathish; 16.12.2016
comment
лс -л | wc -l показывает дополнительный файл на Mac. У меня есть 33 файла, посчитанных вручную, а также с помощью egrep. wc -l вместо этого показывает 34! - person runios; 11.02.2018
comment
@runios это потому, что ls -l возвращает дополнительную строку вверху, суммируя размеры файлов для общей суммы. Вы должны использовать ls -1, а не ls -l. Также, если вам нужны скрытые файлы, но без каталогов . и .., вы должны использовать ls -1A | wc -l - person Daniel Biegler; 07.03.2018
comment
Мой странный фаворит: find . -type f -printf "." | wc -c - person Luke H; 30.08.2019
comment
Эффективный собственный способ без использования канала: du --inodes [root@cs-1-server-01 миллион]# du --inodes 1000001 ./vdb.1_1.dir 1000003 . [root@cs-1-server-01 миллион]# - person Venfah Nazir; 09.01.2020
comment
Почему в egrep -c '^-' в конце фразы стоит дефис -? - person zardosht; 03.05.2020
comment
Разве это не противоречит традиции не анализировать ls? - person Minh Nghĩa; 14.05.2020