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

Терминал Well более продуктивен, когда вы делаете что-то, и графический интерфейс работает быстрее, когда вы делаете некоторые другие вещи.

Как правило, я нахожу терминал быстрее для выполнения операций с файлами. Например, найдите все файлы в текущем каталоге и посмотрите, какое из них содержит слово hello, или найдите файл через имя файла во всей файловой системе, используя команду locate и т. Д.

Если вы действительно привыкнете к командной строке, вы увидите, что на самом деле есть только несколько вещей, которые вы можете сделать гораздо лучше, используя графический интерфейс, например, просмотр или программирование с помощью достойной среды IDE (а не нано).

16
задан 18 November 2011 в 22:13

15 ответов

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

du folder > file1
du -h folder > file2

Ключевой частью является следующее: конкатенация file1 и file2 строка за строкой, с подходящим разделителем. [ ! d1]

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
9
ответ дан 25 May 2018 в 16:45
  • 1
    Я добавил последнюю часть о том, как сделать ваше решение в псевдониме. – SirCharlo 30 August 2012 в 22:50
  • 2
    Использование реальных файлов в псевдониме (а затем вызов rm на них) - это действительно очень плохая идея ! Подумайте о том, что произойдет, если у меня на самом деле был файл с именем file3 в моем каталоге, он будет перезаписан, а затем удален! @SirCharlo Я удаляю определение псевдонима из этого ответа и заменяю его чем-то более безопасным. – jmiserez 31 December 2013 в 17:10

Вот более общий подход. Получите выходные данные 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
9
ответ дан 25 July 2018 в 20:43

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

du -h folder | sort -h

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

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

27
ответ дан 25 May 2018 в 16:45
  • 1
    есть версия 8.17, поэтому я думаю, что это самый простой способ – steabert 30 August 2012 в 23:59
  • 2
    Благодаря steabert для указания, что команда sort была улучшена из sort -version = 8.17. Это лучший ответ для более новых версий Ubuntu. – Kat Amsterdam 31 August 2012 в 00:07

Этот ответ действителен для 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 /

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

вы могли бы добавить этот псевдоним duf к конец вашего /home/user/.profile, чтобы сделать полу-permenant команды 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 не работает, см. сортировку 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
ответ дан 25 May 2018 в 16:45
  • 1
    Я сообщил об этом разработчикам gnu-core с запросом функции для улучшения функции du -h с функцией сортировки. через bugs-coreutils@gnu.org – Kat Amsterdam 30 August 2012 в 23:40
  • 2
    +1, аналогичный однострочный: du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done – steabert 30 August 2012 в 23:55
  • 3
    Просто попробовал 1 лайнер в живой системе. Получить отказ в доступе и отсутствие результатов. Вы сначала попробовали эту команду в системе Ubuntu? Я изменил папку на / home / username – Kat Amsterdam 31 August 2012 в 00:11
  • 4
    oh, извините, вы должны сбросить -d '', это осталось от использования его на выходе команды file. – steabert 31 August 2012 в 00:43
  • 5
    Это, похоже, отлично работает на системах, отличных от Linux, которые не поддерживают GNU sort. – Stefan Lasiewski 21 November 2017 в 02:08

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

-h, --human-numeric-sort сравнивает считываемые человеком числа (например, 2K 1G). Чтобы иметь эту опцию в BSD / OSX, вы можете установить sort с coreutils (через brew) и добавить папку bin в PATH в ваши файлы rc.

Итак, команда будет выглядеть так:

du -ah . | sort -rh | head -20
2
ответ дан 25 May 2018 в 16:45

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

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

0
ответ дан 25 May 2018 в 16:45

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

  du -sk * | sort -rn 
0
ответ дан 25 May 2018 в 16:45
  • 1
    @Jobin благодарит человека. У вас много терпения – Ten-Coin 23 December 2013 в 21:43
  • 2
    : D Теперь я привык к тому, чтобы сменить Ctrl + Alt + t на формат выше, так что я вставил необходимый формат на свой Xpad. : D Чувствуется, что вас похвалили за такую ​​грязную работу :) – jobin 23 December 2013 в 21:47
  • 3
    Каждая работа, которую вы здесь сделали, стоит дополнять. – Ten-Coin 23 December 2013 в 22:27

Он обрабатывает имена файлов с пробелами или апострофами и работает в системах, которые не поддерживают 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
ответ дан 25 May 2018 в 16:45
  • 1
    В чем смысл замены \n на \0? Разве это не слишком поздно для этого? – muru 23 November 2014 в 23:45
  • 2
    он подготавливает вход для xargs -0, который ожидает, что ввод будет NULL, ограниченным (как будет найдено find -print0). В противном случае вы не можете использовать -0, а апострофы имеют особое значение. – Mark Crossfield 23 November 2014 в 23:51
  • 3
    Я знаю о -0, но это не имеет значения: imgur.com/87w3vfj – muru 24 November 2014 в 00:02
  • 4
    Я думаю, что это работает так, как вы использовали обратный ход, а не апостроф. gist.github.com/mrmanc/8aef830945ce03aa65f0 – Mark Crossfield 24 November 2014 в 19:17

Тот, который я нашел во всех системах независимо от версии (sort -h не работает для меня) is

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

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

0
ответ дан 25 May 2018 в 16:45

Он обрабатывает имена файлов с пробелами или апострофами и работает в системах, которые не поддерживают 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
ответ дан 25 July 2018 в 20:43

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

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

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

< / blockquote>

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

du -ah . | sort -rh | head -20
27
ответ дан 2 August 2018 в 02:29

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

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

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

< / blockquote>

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

du -ah . | sort -rh | head -20
27
ответ дан 4 August 2018 в 18:16

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

  du -sk * | sort -rn 
0
ответ дан 6 August 2018 в 02:43

Этот ответ действителен для 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-

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

вы могли бы добавить этот псевдоним duf в конец ваш /home/user/.profile, чтобы сделать полу-permenant команды 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 не работа см. в сортировке 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
ответ дан 10 August 2018 в 08:44

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

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

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

< / blockquote>

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

du -ah . | sort -rh | head -20
27
ответ дан 10 August 2018 в 08:44

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

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