Количество файлов в папке, дает разные результаты

Для подсчета количества файлов в папке, которую я использую:

ls -l | wc -l

но это дает 1 больше, чем:

ls | wc -l

Что вызывает это? И что обозначают три числа

ls | wc

2 ответа

Решение

Когда вы используете ls -l вы не только получаете список всех файлов в указанном каталоге, по одному файлу на строку, но вы также получаете total [BLOCKS] строка вверху, которая показывает, сколько файловой системы блокирует все файлы в этой папке. Дополнительную информацию об этой строке можно найти в разделе Что это за "сумма" в самой первой строке после ls -l? Переполнение стека.

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


От wcManpage:

Print  newline,  word,  and  byte counts for each FILE

Итак, первый номер в wcВыходные данные - это количество строк, вторая - количество слов ("Слово - это последовательность символов ненулевой длины, разделенных пробелом."), а последнее число - размер ввода в байтах.


Вы можете прочитать страницы руководства (справочные страницы) большинства команд, набрав man COMMAND в терминале, например man ls или же man wc,

Смотрите эту ссылку о том, почему пытается обработать (разобрать) вывод ls рискованно

Вместо этого получите количество ссылок на каталог (см. man stat), вычтите 2 (для . а также .. записей).

dir=$PWD
Nfiles=$(( $(stat --printf=%h $dir) - 2 ))

Примечание: это считает файлы и каталоги в $dir, Подсчет двух по отдельности - это другая проблема.

Другие вопросы по тегам