Подсчитать количество каталогов

Чтобы добавить дополнительное пространство, вам нужно изменить размер 5 вещей:

  1. Диск (VDI)
  2. Раздел
  3. Физический том
  4. Логический том
  5. Файловая система

Что вы можете сделать, это...

  1. Измените размер VDI и раздела, как вы делали раньше.
  2. Измените размер физического тома с помощью команды: pvresize /dev/sda2
  3. Измените размер логического тома и файловой системы за один раз с помощью команды: lvresize -L +50G /dev/ВАШЕ_ОБЪЕМ_ГРУППЫ_ИМЯ/vg_centos6
1
30.06.2017, 23:33
3 ответа

Предполагая, что все lib-каталоги имеют разумные имена без символов новой строки или других странных/экзотических символов:

find / -type d -name "lib*" -print | wc -l

Это предполагает, что вы, согласно "всему поддереву каталогов", означает «где угодно». Измените /на .для подсчета только в текущем каталоге или ниже.

Команда findнайдет все каталоги (-тип d), имя которых начинается с lib(-name "lib*") и распечатайте их (-print).

Команда wc -lбудет подсчитывать количество строк в выводе команды find.

0
27.01.2020, 23:11

Вот решение только для bash -, использующее globstarпараметр оболочки:

$ shopt -s globstar; c=0; for f in ** ; do echo "${f##*/}"; [[ "${f##*/}" =~ ^lib* ]] && [[ -d "$f" ]]  && ((c++)); done ; echo $c

Или в формате скрипта для удобства чтения:

#!/usr/bin/env bash
shopt -s globstar 
c=0
for f in **
do 
    echo "${f##*/}"
    if [[ "${f##*/}" =~ ^lib* ]] && [[ -d "$f" ]]
    then 
        ((c++))
    done
echo $c

globstarпозволяет нам включить рекурсивную подстановку и через [[с сопоставлением с образцом и флагом -d, чтобы проверить, является ли это каталогом, мы увеличиваем переменную-счетчик $c, которую мы печатаем в конце.

0
27.01.2020, 23:11
LC_ALL=C find.//. -name 'lib*' -type d | grep -c //

Вы не можете использовать find. | wc -l, так как это не будет работать должным образом, если есть пути к файлам с символами новой строки.

Без LC_ALL=Cэто могло бы не учитывать имена каталогов, которые начинаются с lib, но где остальная часть имени содержит байты, которые не образуют допустимые символы.

Сzsh:

(){echo $#} **/lib*(DN/)
5
27.01.2020, 23:11

Теги

Похожие вопросы