Общее количество файлов на сервере, где я плачу за хостинг, было слишком высоким. Мне нужно было найти способ подсчитать количество файлов в каждой подпапке, чтобы я мог сосредоточить свое внимание на областях, где много файлов.

Я не смог найти ни одного ответа, который бы показал мне, как делать то, что я пытался сделать, поэтому я решил опубликовать свой вопрос, а затем ответить на него, чтобы другие могли его использовать.

Мой вопрос:

Как я могу прокрутить подкаталоги в моем текущем каталоге и создать список, который показывает количество рекурсивных файлов в каждом подкаталоге, отсортированное по количеству файлов?

2 ответа2

1
du --inodes ${topdir} 

перечислит количество inode, используемых каждым каталогом (и его подкаталогами). Вы можете легко определить самых крупных преступников:

du --inodes ${topdir} | sort -n

Каталоги внизу будут самыми большими (и последним будет каталог, который вы передали du (${topdir} в приведенных выше командах).

#>du --inodes /usr/share/gimp | sort -n
1       /usr/share/gimp/2.0/fonts
2       /usr/share/gimp/2.0/tags
2       /usr/share/gimp/2.0/themes/Small
2       /usr/share/gimp/2.0/tips
3       /usr/share/gimp/2.0/tool-presets/Selection
3       /usr/share/gimp/2.0/ui/plug-ins
4       /usr/share/gimp/2.0/dynamics/FX
4       /usr/share/gimp/2.0/images
4       /usr/share/gimp/2.0/ui
6       /usr/share/gimp/2.0/brushes/Splatters
6       /usr/share/gimp/2.0/scripts/images
7       /usr/share/gimp/2.0/tool-presets/Sketch
8       /usr/share/gimp/2.0/brushes/Legacy
8       /usr/share/gimp/2.0/dynamics/Basic
8       /usr/share/gimp/2.0/gflare
9       /usr/share/gimp/2.0/brushes/Sketch
9       /usr/share/gimp/2.0/gradients/gimp-obsolete-files
9       /usr/share/gimp/2.0/tool-presets/FX
10      /usr/share/gimp/2.0/gimpressionist/Paper
11      /usr/share/gimp/2.0/brushes/Basic
11      /usr/share/gimp/2.0/gfig
12      /usr/share/gimp/2.0/brushes/Media
13      /usr/share/gimp/2.0/brushes/Texture
17      /usr/share/gimp/2.0/tool-presets/Paint
21      /usr/share/gimp/2.0/dynamics
26      /usr/share/gimp/2.0/gimpressionist/Presets
32      /usr/share/gimp/2.0/menus
34      /usr/share/gimp/2.0/fractalexplorer
37      /usr/share/gimp/2.0/tool-presets
41      /usr/share/gimp/2.0/brushes/gimp-obsolete-files
41      /usr/share/gimp/2.0/palettes
59      /usr/share/gimp/2.0/patterns
61      /usr/share/gimp/2.0/gimpressionist/Brushes
65      /usr/share/gimp/2.0/themes/Default/images/preferences
70      /usr/share/gimp/2.0/themes/Default/images
72      /usr/share/gimp/2.0/themes/Default
75      /usr/share/gimp/2.0/themes
80      /usr/share/gimp/2.0/gradients
98      /usr/share/gimp/2.0/gimpressionist
101     /usr/share/gimp/2.0/brushes
270     /usr/share/gimp/2.0/scripts
881     /usr/share/gimp/2.0
882     /usr/share/gimp
1

Я создал файл в моей домашней папке с именем filecnt , который содержит следующие строки кода:

for d in *; do
  if [[ -d $d ]]; then
    echo `find $d -type f | wc -l` $d;
  fi
done | sort -n -k1

Затем я изменил права доступа к файлу, чтобы разрешить выполнение:

chmod 755 ~/filecnt

Теперь из любого каталога я могу запустить ~/filecnt чтобы увидеть список подкаталогов в текущем каталоге с их рекурсивным количеством файлов. Список отсортирован по количеству файлов (по возрастанию). Например:

0 access-logs
20 logs
187 etc
232 cache
694 tmp
30007 mail
48325 public_html

Вы можете сделать то же самое, просто выполнив следующую команду из CLI:

for d in *; do if [[ -d $d ]]; then echo `find $d -type f | wc -l` $d; fi done | sort -n -k1

Добавить -r к последней команде sort для сортировки по убыванию.

Чтобы получить более приятный вывод, вы также можете использовать следующий код в ~/filecnt вместо кода в верхней части этого ответа:

echo "File Count    Dir Size  Directory"
echo "----------  ----------  -------------------------"
for d in *; do
  if [[ -d $d ]]; then
    echo `find $d -type f | wc -l` | awk '{printf "%10s  ", $0;}'
    echo `du -h --max-depth=0 $d` | cut -d\  -f 1 $1 | awk '{printf "%10s  ", $0;}'
    echo $d
  fi
done | sort -n -k1
echo

Вывод выглядит так:

File Count    Dir Size  Directory
----------  ----------  -------------------------
         0           0  access-logs
        20        8.3M  logs
       187        4.8M  etc
       232        228K  cache
       694         23M  tmp
     30715        6.4G  mail
     48272        2.3G  public_html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .