Как я могу отсортировать список, используя удобочитаемую сортировку по размеру файла, числовую сортировку, которая принимает во внимание идентификатор размера (G, M, K)? Могу ли я отсортировать " du -sh
" вывод, например?
Проблема: рассмотрите проблему перечисления файлов / папок и сортировки их по размеру. Вы можете достичь этого, запустив:
du -s * | sort -n
Здесь перечислены файлы / папки, отсортированные по размеру. Однако значение печатного размера указывается в байтах (или мегабайтах, или гигабайтах, если вы выберете).
Было бы желательно иметь возможность сортировки на основе удобочитаемых значений, чтобы я мог выполнить что-то аналогичное
du -sh * | <human-readable file sort>
И папка 1,5 ГБ появляется после 2.0M.
brew install coreutils
(который добавляет все команды coreutils к «g»). Вы можете тогда сделатьgdu -hs * | gsort -h
.du -hs *
на Mac OS X работает нормально, ноsort -h
возвращаетсяsort: invalid option -- h
. Можно также установить пакет coreutils через MacPorts, как описано здесь .Если вы просто беспокоитесь о файлах размером более 1 МБ, как вам кажется, вы можете использовать эту команду для их сортировки и использовать awk для преобразования размера в МБ:
Опять же, это округляет размеры до ближайшего МБ. Вы можете изменить его, преобразовав в единицу по вашему выбору.
источник
du -sm * | sort -n
.-s
/-g
Делаетdu
размеры выходных в мегабайтах / гигабайт.int($1 / (1024 * 1024))
Он обрабатывает имена файлов с пробелами или апострофами и работает в системах, которые не поддерживают
xargs -d
илиsort -h
:что приводит к:
источник
Вот еще один:
Возможно, вам придется сделать
первый.
источник
дю -ск * | сортировать -n | awk '{print $ 2}' | пока читаешь ф; do du -sh "$ f"; сделано
источник
Эта команда будет сортировать по размеру в МБ
источник
-h
флага для du.Я оказался здесь, так как пытался отсортировать что-то еще, объединяющее MB и GB в одном выводе, и я не мог это контролировать.
$NF
используется, так как шаблон#GB
or#MB
был последним столбцом в выводе:Объяснение команды awk:
if ($NF ~ /[0-9\.]+GB/)
если последний столбец соответствует шаблону регулярных выражений, который содержит цифру или
.
один или несколько раз, за которыми следуетGB
{ a=gensub(/([0-9\.]+)(GB)/,"\\1","g",$NF); \
затем установите переменную
a
в цифровую часть каждой строки, которая соответствует тому же шаблону регулярных выражений в том же последнем столбце ($NF
)printf "%sMB\n", a*1024} \
после настройки
a
используйтеprintf
для форматирования вывода${a*1024}MB
else {print $NF}
в противном случае просто напечатайте последний столбец
sort -n
использовать числовую сортировку на выходе
пример
Я уверен, что есть способ повторно использовать шаблон регулярных выражений, поэтому я выполняю матч только один раз и заменяю на месте, но пока не знаю, как это сделать :)
источник