Как посчитать количество папок в конкретном каталоге. Я использую следующую команду, но она всегда предоставляет дополнительную.
find /directory/ -maxdepth 1 -type d -print| wc -l
Например, если у меня 3 папки, эта команда предоставляет 4. Если содержит 5 папок, команда предоставляет 6. Почему?
Ответы:
find
также печатает сам каталог:Вместо этого вы можете протестировать дочерние элементы каталога и вообще не спускаться в них:
Вы также можете использовать
ls
:источник
$ ls -l .vim
с PHP? Или как получить только сумму, без списка. Я имею ввиду, только в этом случае получить52
?(ls).Count
ls -l | grep -c ^d
мертво просто и работает. @Pathros, вероятно, есть лучший способ в PHP, но в худшем случае в PHP вы всегда можете использовать функцию shell_exec () для выполнения командной строки и возврата результатов в строку. ie$dirCount = shell_exec('ls -l | grep -c ^d');
Получить подсчет только каталогов в текущем каталоге
echo */ | wc
ты выйдешь, как
1 309 4594
2nd digit
представляет нет. каталогов.или
tree -L 1 | tail -1
источник
zsh: no matches found: */
нуждается в nullglobecho
. типwhich echo
echo */ | wc -w
Для поиска
-mindepth
означает общее количество в каталогах-maxdepth
означает общее количество в каталогах-type d
означает каталогА для
wc -l
средств подсчитайте строки вводаисточник
find . -mindepth 1 -maxdepth 1 -type d | wc -l
даст вам много пробелов между числами, например: `2` вы можете предотвратить это, используя это:dir_count=`find . -maxdepth 1 -type d | wc -l | xargs`; echo $dir_count # will print just 2
и может быть полезно для таких условий, как:if (( $dir_count > 1 )); then echo "Yaa"; fi # will print "Yaa"
Если у вас есть только каталоги в папке и нет файлов, это сделает это:
источник
Лучший способ перейти к вашему диску и просто выполнить
а Найти все папки вместе, включая подкаталоги?
... или найти все папки в корневом каталоге (не включая подкаталоги)?
Ура!
источник
-lR
игнорируют каталог с префиксом точки при ихfind -type d
подсчете. Таким образом, счетчик, заданный первой командой, неверен, если у вас есть каталоги с префиксом точки (например, у вас есть подкаталог .git!). Вы не можете просто использовать,-lRa
потому что вы также получаете для каждого каталога a.
и..
запись. Это также относится к ответу @Pavel AnossovВыполните
stat -c %h folder
и вычтите 2 из результата. При этом используется только один подпроцесс, в отличие от 2 (или даже 3), необходимых для большинства других решений здесь (обычноfind
плюсwc
).Используя sh / bash:
Используя csh / tcsh:
Объяснение:
stat -c %h folder
печатает количество жестких ссылок на папку , и каждая подпапка в папке содержит запись ../, которая является жесткой ссылкой на папку . Вы должны вычесть 2, потому что в счетчике есть две дополнительные жесткие ссылки:источник
Я думаю, что самое простое это
где
images
ваш целевой каталог. Флаг -d ограничивает каталоги, а флаг -l выполняет листинг для каждой строки, совместимый с хорошо знакомымwc -l
для подсчета строк.источник
man ls
,-d
does: «перечисляет сами каталоги, а не их содержимое», то есть, если вы запуститеls /tmp
, вы получите то, что есть/tmp
, а если вы запустите,ls -d /tmp
вы просто получите/tmp
.-d
Коммутатор не фильтровать каталоги, как и было запрошено.Несколько полезных примеров:
подсчитать файлы в текущем каталоге
считать каталоги в текущем каталоге
подсчитать файлы и каталоги в текущем каталоге
подсчитывать файлы и каталоги в одном подкаталоге
Я заметил странную вещь (по крайней мере, в моем случае):
источник
Нет каталога, который мы можем найти, используя команду ниже
ls -l | grep "^d" | wc -l
источник
ls -l | grep ^d | wc -l
будет делать, нет необходимости использовать"
здесьРешение на чистом bash:
Если вы также хотите подсчитать скрытые каталоги:
Обратите внимание, что это также будет учитывать ссылки на каталоги. Если вы этого не хотите, с этим методом будет немного сложнее.
Использование
find
:Хитрость заключается в том, чтобы выводить
x
на стандартный вывод каждый раз, когда каталог найден, а затем использоватьwc
для подсчета количества символов. Будет подсчитано количество всех каталогов (включая скрытые), исключая ссылки.Представленные здесь методы безопасны по отношению к забавным символам, которые могут появляться в именах файлов (пробелы, новые строки, символы глобуса и т. Д.).
источник
Использование
zsh
:Это
N
нульглоб,/
заставляет его соответствовать каталогам,#
считает. Он аккуратно справится с пробелами в именах каталогов, а также вернется,0
если каталогов нет.источник
Подсчитайте все файлы и подпапки в стиле Windows:
источник
Если вы хотите использовать регулярные выражения, попробуйте:
источник
Лучший ответ на то, что вы хотите -
это вычитает единицу, чтобы удалить ненужные "." каталог, в котором можно найти списки (как указано выше Patel deven).
Если вы хотите рекурсивно подсчитывать подпапки, просто оставьте параметр maxdepth, поэтому
PS Если вы считаете подстановку команд некрасивой, вычитание может быть выполнено как чистый поток, используя
sed
иbc
.Вычитая единицу из счета:
или, добавив счетчик к минус единице:
источник
Лучший способ сделать это:
Это дает вам идеальный счет.
источник
total
? ваш метод не работает:(
. Не разбирайтеls
!