Как отсортировать количество инодов от наибольшего к наименьшему - PullRequest
0 голосов
/ 30 сентября 2019

Я использую приведенный ниже код для отображения inode и дискового пространства. Это работает нормально, но я хочу отсортировать счет от наибольшего к наименьшему. Какие изменения мне нужно сделать?

Я пытался добавить sort | uniq -c | sort -rn, но он не работает.

for DIR in `find $CURDIR -maxdepth 1 -type d |grep -xv $CURDIR |sort`; do
    COUNT=$(GET_COUNT $DIR)
    SIZE=$(GET_SIZE $DIR)

    # Check if exclude arg was used, and if so only output directories above exclude inode count
    if [[ -z $exclude ]] || [[ -n $exclude && $COUNT -gt $exclude ]]
    then
        printf "$format" "  $COUNT" "  $SIZE" "`basename $DIR`"
    fi

Мне нужно получить число инодов и размер диска от наибольшего к наименьшему.

1 Ответ

0 голосов
/ 01 октября 2019

Вместо того, чтобы обрабатывать каждую папку в цикле, рассмотрим комбинирование использования 'find ... -printf', объединение его с соответствующим выражением для фильтрации (для правила исключения)

find $CURDIR -mindepth 1 -maxdepth 1 - type d -links +${exclude-0} -printf '%n %s %f\n'

Где

  • mindepth исключит верхний каталог,
  • $ {exclude-0} заставит выражение выражаться числовым (в результате '-links +0', если exclude не установлено).
  • printf используется для вывода количества ссылок, размера файла (в байтах) и имени базового файла.

Например:

exclude=2
find . -mindepth 1 -maxdepth 1 -type d  -links +${exclude+0} -printf '%n %s %f\n' 

Output:
3 4096 a
3 4096 b
...