Як сортувати за чисельними для людини розмірами чисельно?


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 за те, що вказав, що команда сортування була покращена з сортування --version = 8.17 Це найкраща відповідь для новіших версій Ubuntu.
Кет Амстердам

Це повинно бути прийнятим, тому що чисті зйомки вирішують ОПsort -h
Nam G VU

4

Ця відповідь дійсна для 10.04.4LTS та нижчих версій Ubuntu.

На жаль, точна відповідь, який сортувати KMG є складним і складним:

Ви можете псевдонімувати всю команду 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 напівпроникною

результати:

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
Kat Amsterdam

+1, подібний du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done
однолінійний

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

о, вибачте, вам слід скинути це -d '', що залишилося від його використання на виході з файлової команди.
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 

: DI зараз я звик змінити Ctrl + Alt + t на формат вище, щоб я вставив потрібний формат на свій Xpad. : D
Чудово похваляється

Кожна робота, яку ви тут зробили, варто доповнити.
rɑːdʒɑ

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 (як результат знаходження -print0). В іншому випадку ви не можете використовувати -0, і апострофи мають особливе значення.
Марк Кросфілд

Я знаю про -0, але це не має значення: imgur.com/87w3vfj
muru

Я думаю, що це працює так, як ви використовували backtick, а не апостроф. 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.