Как отсортировать по количеству читаемых человеком размеров?


20

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

du folder | sort -n

это прекрасно работает, однако я хотел бы иметь удобочитаемую форму

du -h folder

Однако, если я это сделаю, я не смогу отсортировать их по числовым значениям.

Как присоединиться du folderи du -h folderпросмотреть отсортированный результат du folder, но с первым столбцом изdu -h folder

PS это всего лишь пример. эта техника может быть очень полезна для меня (если это возможно)

Ответы:


11

Вот более общий подход. Получите вывод du folderи du -h folderв двух разных файлах.

du folder > file1
du -h folder > file2

Ключевая часть такова: объединить file1и file2построчно, с подходящим разделителем.

paste -d '#' file1 file2 > file3

(при условии #, не появляется в file1и file2)

Теперь сортируй file3. Обратите внимание, что это будет сортировать на основе file1содержимого и разрывать связи по file2содержимому. Извлеките соответствующий результат, используя cut:

sort -n -k1,7 file3 | cut -d '#' -f 2

Также обратите внимание на man sortдругие варианты.


Вы также можете сохранить это как псевдоним для последующего повторного использования. Для этого добавьте следующее в конец ~/.bashrc:

sorted-du () {
    paste -d '#' <( du "$1" ) <( du -h "$1" ) | sort -n -k1,7 | cut -d '#' -f 2
}

Затем откройте новый сеанс терминала и выполните новый псевдоним:

sorted-du /home

Я добавил последнюю часть о том, как превратить ваше решение в псевдоним.
SirCharlo

1
Использование реальных файлов в псевдониме (а затем вызов rm для них) - действительно очень плохая идея ! Подумайте о том, что произойдет, если file3в моем каталоге будет файл с именем , он будет перезаписан, а затем удален! @SirCharlo Я удаляю определение псевдонима из этого ответа и заменяю его более безопасным.
jmiserez

Хорошо, askubuntu.com/a/80248/22308 просто сделайте это сsort -h
Nam G VU

36

Попробуйте что-то вроде:

du -h folder | sort -h

Альтернативы: -nдля числовой сортировки

Примечание: -hопция сортировки существует только в более новых версиях Ubuntu.


3
есть в версии 8.17, поэтому я думаю, что это самый простой способ
Steabert

1
Спасибо steabert за то, что он указал, что команда sort была улучшена по сравнению с sort --version = 8.17. Это лучший ответ для более новых версий Ubuntu.
Кэт Амстердам

Это должно быть принято, потому что это чистая стрельба, которая решает OP сsort -h
Нам G VU

4

Этот ответ действителен для 10.04.4LTS и более ранних версий Ubuntu.

К сожалению, точный ответ, который сортирует КМГ, сложен и сложен:

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

alias duf='du -sk * | sort -n | perl -ne '\''($s,$f)=split(m{\t});for (qw(K M G)) {if($s<1024) {printf("%.1f",$s);print "$_\t$f"; last};$s=$s/1024}'\'

который я нашел здесь

http://www.earthinfo.org/linux-disk-usage-sorted-by-size-and-human-readable/

просто перейдите в папку, которую вы хотели бы знать, тогда duf

вы можете добавить этот псевдоним duf в конец вашего /home/user/.profile, чтобы сделать команду duf полупостоянной

Результаты:

user@hostname:~$ duf
0.0K  Documenten
0.0K  Muziek
0.0K  Openbaar
0.0K  Sjablonen
0.0K  Video's
4.0K  backup_db.sql.g
4.0K  examples.desktop
12.0K xml printer ticket
52.0K hardinfo_report.html
152.0K    librxtxSerial.so
2.7M  jpos
4.4M  nxclient_3.5.0-7_amd64.deb
6.4M  nxnode_3.5.0-4_amd64.deb
6.8M  Downloads
7.4M  nxserver_3.5.0-5_amd64.deb
12.4M NetBeansProjects
18.1M mysqlworkbench.deb
28.3M Afbeeldingen
45.8M ergens-20110928-18.sql.gz
60.5M 2012-06-02ergens_archive.tar.gz
65.5M 2012-08-26ergens_archive.tar.gz
65.6M 2012-08-28ergens_archive.tar.gz
65.6M 2012-08-29ergens_archive.tar.gz
65.7M 2012-08-30ergens_archive.tar.gz
113.0M    Bureaublad
306.2M    ergens-20110928-18.sql

Вот почему du -sch /var/* | sort -nне работает см. Сортировка МККММККММК

user@hostname:~$ du -sch /var/* |sort -n

0 /var/crash
0 /var/local
0 /var/lock
0 /var/opt
8,0M  /var/backups
12K   /var/games
16K   /var/tmp
17M   /var/log
68M   /var/cache
104K  /var/spool
144K  /var/run
351M  /var/lib
443M  totaal
704K  /var/mail

Я сообщил об этом разработчикам gnu-core с запросом на добавление функции du -h с помощью функции сортировки. через bugs-coreutils@gnu.org
Кат Амстердам

+1, аналогичный однострочник:du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done
steabert

Только что попробовал свой 1 лайнер на живой системе. Получите ошибку «Отказано в доступе» и никаких результатов. Вы пробовали эту команду сначала в системе Ubuntu? Я изменил папку на / home / username
Kat Amsterdam

о, извините, вы должны отбросить -d '', это осталось от использования его на выходе команды file.
Steabert

Похоже, это прекрасно работает на не Linux-системах, которые не поддерживают GNU sort.
Стефан Ласевский

2

Команда GNU sortимеет следующую опцию:

-h, --human-numeric-sort Сравнить читаемое число людей (например, 2K 1G).

Чтобы использовать эту опцию в BSD / OSX, вы можете установить sortиз coreutils(через brew) и добавить папку bin в вашу PATHпапку rc .

Таким образом, команда будет выглядеть так:

du -ah . | sort -rh | head -20

0

Для последних версий Ubuntu используйте du -h directory | sort -h.

Я все время использую эту форму для поиска неконтролируемых файлов.


Дубликат ответили 17 ноября '11 в 17:13 Allu2
Старейшина Гик

0

Откройте терминал с помощью Ctrl+ Alt+ tи введите:

  du -sk * | sort -rn 

: D Теперь я привык менять Ctrl + Alt + t на формат выше, так что я вставил нужный формат в свой Xpad. : D Чувствую себя великолепно, когда
тебя хвалят

Каждую работу, которую вы здесь сделали, стоит дополнить.
2013 года

0

Он обрабатывает имена файлов с пробелами или апострофами и работает в системах, которые не поддерживают xargs -dили sort -h:

du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}"

что приводит к:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm

Какой смысл заменить \nна \0? Не слишком ли поздно для этого?
Муру

он подготавливает входные данные для xargs -0, которые ожидают, что входные данные будут разделены NUL (как будет производить команда find -print0). В противном случае вы не можете использовать -0, и апострофы имеют особое значение.
Марк Кроссфилд

Я знаю о -0, но это не имеет значения: imgur.com/87w3vfj
muru

Я думаю, что это работает, так как вы использовали обратный удар, а не апостроф. gist.github.com/mrmanc/8aef830945ce03aa65f0
Марк Кроссфилд

0

Я обнаружил, что работает на всех системах независимо от версии ( sort -hу меня не работает)

du -h $(du * | sort -n | awk '{print $2}')

в awk '{print $2}'основном печатает имена файлов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.