команда du не разбирает скрытые каталоги

25

Я хочу оценить объем дискового пространства, используемого каталогом, используя следующую команду.

du -sh dir_name

который не рассчитывает скрытые каталоги. На странице руководства du нет информации об этом. Как рассчитать объем дискового пространства, используемого каталогами, включая скрытые файлы.

Talespin_Kit
источник

Ответы:

13

На самом деле это так, вот доказательство:

mkdir .test
echo "hi" > .test/appo
du -a
4       ./.test/appo
8       ./.test
12      .

-aОпция используется явно показать , какие файлы были подсчитаны.

Вы используете du *?

stivlo
источник
3
+1 за... you maybe using "du *" ?
сехе
2
Я не использую "du *". Я забыл упомянуть в вопросе, что мне нужно общее резюме. поэтому, если я использую и -a, и -s, как в du -as, я получаю сообщение об ошибке, говорящее: du не может суммировать и показывать все записи. Это одна проблема. Другое дело, что я даже с du -ai вижу только файлы первого уровня. т.е. не может видеть файлы внутри скрытых каталогов.
Talespin_Kit
1
Я просто добавил -a, чтобы показать все подсчитываемые файлы, просто не добавляйте этот флаг, он влияет только на отображение, а не на итоговые значения. Я показал вам контрпример, что вместо скрытых каталогов учитываются.
stivlo
1
Теперь я нашел проблему. Проблема была в том, что скрытый каталог представлял собой символическую ссылку, поэтому мне пришлось использовать "du -Lsh dir_name". Спасибо.
Talespin_Kit
1
Ах, я вижу, рад, что вы нашли это, ура.
stivlo
53

Эта команда показывает вам суммарный размер скрытых каталогов

du -hs .[^.]*

ecerutti
источник
1
Это именно то, что я искал, спасибо :)
Nikana Reklawyks
это правильное решение
3pns
было бы замечательно, если бы вы могли немного объяснить магию этого. это поможет сформировать ответ, который включает как скрытые, так и не скрытые файлы и каталоги.
kumetix
13

Правильная команда: du -hs $(ls -A)

$ du -hs $(ls -A)
0   test
0   .test

du -hs .* *Как уже упоминалось в другом ответе, это не правильно, если вы хотите перечислить все файлы и подкаталоги (включая скрытые).

Пример :

$ touch test
$ touch .test
$ echo *
test
$ echo .* *
. .. .test test
$ du -hs .* *
4,0K    .
1,8G    ..

Почему так duсебя ведет? Потому что вы используете, -sчтобы суммировать результат и что все файлы и подкаталоги являются потомками, .поэтому du -hsне перечисляет их!

Гийом Миссонье
источник
11

К вашему сведению, для оценки размера, занимаемого различными каталогами, гораздо лучше использовать ncdu

Вы можете перемещаться в графическом интерфейсе ncurses между различными каталогами, и он покажет размер каждого каталога. Если я использую du, мне придется выполнять команду du для каждого каталога, который я хочу проверить, что может быть громоздким. Вы можете отсортировать каталоги по размеру, занимаемому в графическом интерфейсе ncurses.

Абхиджит Растоги
источник
1
Пожалуйста, измените свой ответ, чтобы указать, почему вы считаете, что ncdu «намного лучше». Связанная страница на самом деле ничего не говорит об этом, кроме того, что это версия на основе ncurses du. Помимо более изящного метода отображения, нет никаких очевидных признаков каких-либо функциональных различий.
Дейв Шерохман
Я думаю, что возможность динамически корректировать ваш запрос - огромное преимущество. Я могу запустить ncdu на ~, узнать, какие каталоги занимают больше всего места, а затем погрузиться в них. Он также дает вам dпривязку для удаления каталогов, так что вы можете очистить непосредственно из интерфейса.
user88974
5

Это делает, и это не так. Пример:

В домашнем каталоге: (существует только один пользователь)

du -sh /home/*
2.6G    /home/user

в пользовательском каталоге: (огромная разница между суммами)

du -sh *
61M     bin
2.0M    dump-20130124104823.tar.gz
651M    public_html
472K    twitter-2.0.0.gem
11M     wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2

и причина в том, что:

du -sh /home/user/.rvm/
1.9G    /home/user/.rvm/

du будет вычислять скрытые каталоги при спуске в подкаталоги, но в текущем каталоге * просто не соответствует шаблону .directory_name, поэтому скрытые элементы текущего каталога будут опущены.

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

bonyiii
источник
1

Правильная команда: du -hs .* *

воробей
источник
Некоторая дополнительная информация сделает этот ответ приемлемым.
Ramhound
1

find -maxdepth 1 -exec du -sh "{}" \; | sort -h

Это дает вам:

  • Размер скрытых файлов / каталогов
  • Размер не скрытых файлов / каталогов
  • Общий размер текущего каталога

Он также сортирует выходные данные, чтобы было легче увидеть, что является самым большим. Я также сделал это псевдоним в моем ~/.bash_aliasesфайле.

alias big='find -maxdepth 1 -exec du -sh "{}" \; | sort -h'
alias sbig='sudo find -maxdepth 1 -exec du -sh "{}" \; | sort -h'

Теперь я могу просто выполнить bigпоиск, чтобы найти самые большие каталоги в каталоге и sbigкогда мне нужны разрешения sudo.

Митчелл Трейси
источник
0
du -ahd1 | sort -hr | head -10

Ниже приводится описание -dопции в du --help:

-d, --max-deep = N выводить итоговое значение для каталога (или файла с --all), только если оно на N или меньше уровней ниже аргумента командной строки; --max-глубина = 0 - это то же самое, что и --summarize

luochen1990
источник
Хотя это может помочь решить проблему, это не объясняет, почему и / или как она решает проблему. Предоставление этого дополнительного контекста значительно улучшило бы его долгосрочную образовательную ценность. Пожалуйста, измените свой ответ, чтобы добавить объяснение, в том числе какие ограничения и предположения применяются. Спасибо.
fixer1234
0

Эта команда поможет вам проверить использование диска, попасть в каталог и выполнить следующее.
"du -sch. [!.] * * | sort -h"

Вот демонстрация того, как рассчитать использование диска для определенного каталога. Я создал каталог с именем Du_sh и создал два файла (один скрытый 10 МБ и обычный 20 МБ) внутри.

nikhil@debian:~$ mkdir Du_sh nikhil@debian:~$ cd Du_sh/ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=.10MB bs=1024 count=10240 10240+0 records in 10240+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0299941 s, 350 MB/s nikhil@debian:~/Du_sh$ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=20MB bs=2048 count=10240 10240+0 records in 10240+0 records out 20971520 bytes (21 MB, 20 MiB) copied, 0.0342258 s, 613 MB/s nikhil@debian:~/Du_sh$ du -sch .[!.]* * 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$ du -sch .[!.]* * | sort -h 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$

Никс никхил
источник