Количество файлов в папке, дает разные результаты
Для подсчета количества файлов в папке, которую я использую:
ls -l | wc -l
но это дает 1 больше, чем:
ls | wc -l
Что вызывает это? И что обозначают три числа
ls | wc
2 ответа
Когда вы используете ls -l
вы не только получаете список всех файлов в указанном каталоге, по одному файлу на строку, но вы также получаете total [BLOCKS]
строка вверху, которая показывает, сколько файловой системы блокирует все файлы в этой папке. Дополнительную информацию об этой строке можно найти в разделе Что это за "сумма" в самой первой строке после ls -l? Переполнение стека.
Чтобы получить только одну строку на файл (и наоборот), вы можете использовать ls -1
вместо этого, который не добавляет дополнительную информацию.
От wc
Manpage:
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
, Подсчет двух по отдельности - это другая проблема.