Почему это не показывает скрытые файлы / папки?

140

Я просматривал свою систему, du -sch ./*чтобы найти большие бесполезные файлы, которые я мог накапливать без причины, когда нашел это:

$ du -sch ./*
du: cannot read directory ‘./drbunsen/.gvfs’: Permission denied
du: cannot read directory ‘./drbunsen/.cache/dconf’: Permission denied
18G ./drbunsen
18G total

$ cd drbunsen/
$ du -sch ./*
601M ./Desktop
20K ./Documents
598M ./Downloads
4.0K ./flash
4.0K ./Music
8.0M ./Pictures
4.0K ./Public
4.0K ./Templates
4.0K ./Ubuntu One
8.0K ./Videos
11G ./VirtualBox VMs
6.9M ./workspace
12G total

Как сделать скрытые файлы видимыми? du -sch ./.*дает тот же результат, что и du -sch ./*.

Dr_Bunsen
источник
du -hs .[^.]* *для всех скрытых файлов, исключая . и ..какие другие ответы, по-видимому, отсутствуют.
laggingreflex

Ответы:

245

использование

du -sch .[!.]* * |sort -h

в вашей домашней папке.

В качестве альтернативы, команда, которую я использую чаще всего,

ncdu

Простота установки при необходимости:

sudo apt-get install ncdu
don.joey
источник
1
Спасибо, ты гений. Я не мастер в Bash, что делать [!.] Делать?
Dr_Bunsen
10
@Dr_Bunsen: это глобус, в котором перечислены все файлы, которые начинаются с одного .. Вот хитрый трюк: если вы не знаете, что делает нечто похожее на глобус, попробуйте запустить echo .[!.]*или что- то в этом роде . Затем оболочка развернет глобус и передаст его echo, распечатав список файлов, которые в результате.
Тихон Джелвис
14
Это не в состоянии перечислить файлы с именем like ..fooи может вызвать проблемы с файлами, чье имя начинается с -. Также может произойти сбой, если список аргументов слишком длинный. du -ahd1не будет иметь ни одной из этих проблем.
Стефан Шазелас
Ненужный к первоначальному вопросу, но отношение ко день к использованию дня: Это может быть полезно включить «с» переключателя для отображения общего и изменять порядок опционов немного , чтобы сделать эту команду немного легче запомнить: du -cksh .[!.]* * |sort -h.
Daddy32
56

У меня такой же вопрос в списке рассылки coreutils, потому что мне было трудно запомнить эту странную команду @ don.joey. И Боб Прулкс предложил лучшую, более естественную команду: du -ahd1 | sort -h

Если вы хотите перечислить все файлы в текущем каталоге, используйте либо «.» или не давать ему никаких аргументов файла вообще. Также вы можете использовать опцию -d, --max-deep = N.

Попробуй это:

du -hd1

Юрий Колесников
источник
7
Добавьте -aопцию, чтобы она была эквивалентной.
Стефан Шазелас
6
Это должен быть принятый ответ, потому что его проще и легче запомнить и понять.
Бастьен
8

Когда вы запускаете ту же команду внутри каталога, она не включает скрытые файлы, которые начинаются с .количества. Например, если у вас установлен Steam, он по умолчанию устанавливает игры под ним, ~/.local/share/Steam/и он сам там также устанавливается.

Под bash вам, очевидно, нужно запускаться, так du -sch .[!.]* *как он неправильно расширяет .*глобус. Под zshили другие оболочки, du -sch * .*должны работать, как .*следует расширить, чтобы включить список всех скрытых файлов в текущем каталоге.

Добей
источник
ХОРОШО. Очевидно, что с bash есть проблема, так как он не расширяется должным образом .*. Но du -sch * .*делает правильную вещь под zsh. В bash, du -sch .*кажется, считается, .но не расширяется, чтобы показать файлы по отдельности.
Добей
Для меня. * Также расширяется до ../* и поэтому du выходит из каталога, в котором я хочу увидеть его размер! Я должен был использовать ./.[^^]* вместо этого.
Ари
Это zsh и все оболочки, полученные из оболочки Forsyth (в настоящее время это в основном только pdksh и его производные), которые делают правильные вещи и не расширяются. и здесь. Все остальные Bourne-подобные оболочки (bash, Bourne, AT & T ksh, dash, yash ...). В zsh, вы бы использовали, du -sch -- *(D)хотя, нет du -sch -- * .*.
Стефан Шазелас