Как я сортирую по человекочитаемым размерам численно?

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

du folder | sort -n

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

du -h folder

однако, если я делаю это, чем я не могу отсортировать его как числовой.

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

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

20
задан 18 November 2011 в 09:13

8 ответов

Вот более общий подход. Получите вывод 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
11
ответ дан 23 November 2019 в 01:46

Попробуйте что-то как:

du -h folder | sort -h

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

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

35
ответ дан 23 November 2019 в 01:46

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

Unfortunatly точный ответ, какие виды K M G являются трудными и сложными:

Можно исказить всю команду 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/

просто CD в папку требуется знать затем duf

Вы могли добавить этот псевдоним duf в конец своего/home/user/.profile, чтобы заставить duf управлять semi-permenant

результаты:

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 не работает посмотрите сортировку MKKMMKKMMK

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
4
ответ дан 23 November 2019 в 01:46

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

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

0
ответ дан 23 November 2019 в 01:46

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

  du -sk * | sort -rn 
0
ответ дан 23 November 2019 в 01:46

Тот я нашел работу над всеми системами независимо от версии (sort -h не работает на меня),

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

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

0
ответ дан 23 November 2019 в 01:46

Эти имена файлов дескрипторов с пробелом или апострофами и работами над системами, которые не поддерживают 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
0
ответ дан 23 November 2019 в 01:46

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

-h, --human-numeric-sort сравните человекочитаемые числа (например, 2K 1G).

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

Таким образом, команда была бы быть похожей:

du -ah . | sort -rh | head -20
2
ответ дан 23 November 2019 в 01:46

Другие вопросы по тегам:

Похожие вопросы: