Я обнаружил, что нет простого способа получить размер каталога в Bash?
Я хочу, чтобы при вводе текста ls -<some options>
он мог рекурсивно отображать всю сумму размера файла каталога и файлов одновременно и сортировать по порядку размера.
Это возможно?
du
это ответ.du
оценивает использование файлового пространства, поэтому вы не можете использовать ее, если хотите получить точный размер.du
(по крайней мере, версия GNU coreutils), вероятно, имеет возможность предоставить информацию.Ответы:
Просто перейдите в каталог и выполните следующую команду:
ИЛИ добавьте -h для удобочитаемых размеров и -r, чтобы сначала распечатать каталоги / файлы большего размера.
источник
du -h
требуетsort -h
тоже, чтобы убедиться, что, скажем,981M
сортирует раньше1.3G
; сsort -n
только цифры будут приняты во внимание , и они были бы навыворот.-a
и использовать--all
вместо--max-depth=1
этогоdu -a -h --all | sort -h
sort -h
работает только с версией GNU / Linux, не повезло с BSD / OS X.Видимо
--max-depth
опция не в версии Mac OS X в частиdu
команды. Вместо этого вы можете использовать следующее.du -h -d 1 | sort -n
источник
(при этом не будут отображаться скрытые (.dotfiles) файлы)
Используйте
du -sm
для единиц МБ и т. Д. Я всегда используюпотому что итоговая строка (
-c
) по очевидным причинам окажется внизу :)PS:
источник
du --max-depth=1|sort -n
илиfind . -mindepth 1 -maxdepth 1|xargs du -s|sort -n
для включения файлов точек.find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 du -s | sort -n
если некоторые из найденных путей могут содержать пробелы.sudo du -smch * | sort -h | tail
Команда
Вывод
Объяснение
du
отображает "использование диска"h
означает "читабельность человеком" (как по типу, так и по типу)max-depth=0
означает,du
что размеры вложенных папок не будут отображаться (удалите это, если вы хотите отображать все размеры каждого файла в каждой вложенной, вложенной, ..., папке)r
для "обратного" (сначала самый большой файл)ncdu
Когда я пришел к этому вопросу, я хотел очистить свою файловую систему. Инструмент командной строки
ncdu
лучше подходит для этой задачи.Установка на Ubuntu:
Использование:
Просто введите
ncdu [path]
в командной строке. Через несколько секунд анализа пути вы увидите что-то вроде этого:Удалить текущий выделенный элемент с помощью d, выйти с CTRL+c
источник
ls -S
сортирует по размеру. Затем, чтобы показать размер, выводитсяls -lS
long (-l
), отсортированный по size (-S
). Я обычно-h
тоже добавляю , чтобы было легче читать, так чтоls -lhS
,.источник
du
, вроде кто-то выложил. @sehe: Зависит от вашего определения real - он показывает количество места, которое каталог использует для своего хранения. (Это просто не добавление размера подстатей.) Это не случайное число, и это не всегда 4 КиБ.Просто и быстро:
* требуется GNU Parallel .
источник
Думаю, я понял, что ты хочешь делать. Это даст отсортированный список всех файлов и всех каталогов, отсортированных по размеру файла и размеру содержимого в каталогах.
источник
du
- это вариант, он даст вам лишь приблизительный результат.[расширенная версия]
Это будет намного быстрее и точнее, чем исходная версия ниже, и будет выводить сумму всех размеров файла в текущем каталоге:
stat -c %s
команда на файл будет возвращать его размер в байтах. Приведеннаяtr
здесь команда используется для преодоленияxargs
ограничений команды (по-видимому, конвейернаяxargs
линия разбивает результаты на большее количество строк, нарушая логику моей команды). Следовательноtr
, позаботьтесь о замене перевода строки+
знаком (плюс).sed
имеет единственную цель - удалить последний+
знак из результирующей строки, чтобы избежать жалоб со стороны последнейbc
(базовой калькулятора) команды, которая, как обычно, выполняет вычисления.Производительность: я протестировал его в нескольких каталогах и более чем на ~ 150 000 файлов сверху (текущее количество файлов в моем ящике fedora 15), получив, как мне кажется, потрясающий результат:
На всякий случай, если вы хотите провести сравнение с
du -sb /
командой, она выведет примерное использование диска в байтах (-b
опция)Как я и ожидал, это немного больше, чем расчет моей команды, потому что
du
утилита возвращает выделенное пространство для каждого файла, а не фактическое использованное пространство.[исходная версия]
Вы не можете использовать
du
команду, если вам нужно знать точный общий размер вашей папки, потому что (согласно ссылке на справочную страницу)du
оценивается использование файлового пространства. Следовательно, это приведет вас к неправильному результату, приближению (возможно, близкому к размеру суммы, но, скорее всего, больше, чем фактический размер, который вы ищете).Думаю, на ваш вопрос можно ответить по-разному, но это мой:
Он находит все файлы в папке. каталог (измените. на любой каталог, который вам нравится), также включаются скрытые файлы и (использование
xargs
) выводит их имена в одной строке, а затем создает подробный список с использованиемls -l
. Этот (иногда) огромный вывод передается по конвейеру в команду вырезания, и только пятое поле (-f5
), которое представляет собой размер файла в байтах, берется и снова передается по конвейеру, в результатеxargs
чего снова создается одна строка размеров, разделенная пробелами. Теперь выполните магию sed, которая заменяет каждое пустое место+
знаком плюс ( ) и, наконец,bc
(базовый калькулятор) выполняет математические вычисления.Может потребоваться дополнительная настройка, и у вас может быть
ls
команда, которая жалуется на слишком длинный список аргументов.источник
Еще одно простое решение.
результат будет выглядеть как
изменение "du -s" на "du -sh" покажет удобочитаемый размер, но мы не сможем выполнить сортировку в этом методе.
источник
вы можете использовать приведенный ниже список файлов по размеру du -h | sort -hr | more or du -h --max-depth = 0 * | sort -hr | Больше
источник
Я предпочитаю использовать du просто.
Это дает мне представление о том, какие каталоги занимают больше всего места. Позже я смогу выполнить более точный поиск.
источник