Как я могу перечислить размер каждого файла и каталога (рекурсивно) и отсортировать по размеру в Bash?

Я обнаружил, что в Bash нелегко определить размер каталога?

Я хочу, чтобы при вводе ls -<some options> он мог рекурсивно перечислять всю сумму размера файла каталога и файлов на в то же время и сортировать по размеру.

Это возможно?

97 голосов | спросил Kit Ho 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 18 Sep 2011 22:37:41 +0400 2011, 22:37:41

7 ответов


0

Просто перейдите в каталог и выполните следующую команду:

du -a --max-depth=1 | sort -n

ИЛИ добавьте -h для удобочитаемых размеров и -r для печати больших каталогов /файлов.

du -a -h --max-depth=1 | sort -hr
ответил Developer 7 FebruaryEurope/MoscowbThu, 07 Feb 2013 14:54:03 +0400000000pmThu, 07 Feb 2013 14:54:03 +040013 2013, 14:54:03
0
du -s -- * | sort -n

(здесь не отображаются скрытые (.dotfiles) файлы)

Используйте du -sm для мегабайт и т. д. Я всегда использую

du -smc -- * | sort -n

потому что итоговая строка (-c) окажется в нижней части по понятным причинам:)

PS:

  • Смотрите комментарии по работе с точечными файлами
  • Я часто использую, например, 'du -smc /home / / | sort -n | tail ', чтобы понять, где именно находятся большие биты
ответил sehe 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 18 Sep 2011 22:44:16 +0400 2011, 22:44:16
0

Видимо, --max-depth отсутствует в Mac OS X версии du команда. Вместо этого вы можете использовать следующее.

du -h -d 1 | sort -n

ответил cevaris 27 J000000Monday15 2015, 00:46:02
0

Command

du -h --max-depth=0 * | sort -hr

Выход

3,5M    asdf.6000.gz
3,4M    asdf.4000.gz
3,2M    asdf.2000.gz
2,5M    xyz.PT.gz
136K    xyz.6000.gz
116K    xyz.6000p.gz
88K test.4000.gz
76K test.4000p.gz
44K test.2000.gz
8,0K    desc.common.tcl
8,0K    wer.2000p.gz
8,0K    wer.2000.gz
4,0K    ttree.3

Описание

  • du отображает «использование диска»
  • h для «удобочитаемого» (как в виде, так и в формате du)
  • max-depth=0 означает, что du не будет отображать размеры подпапки (удалите это, если хотите показать все размеры каждого файла в каждой подпапке, подпапке, ..., папке)
  • r для "реверс" (сначала самый большой файл)

ncdu

Когда я пришел к этому вопросу, я хотел очистить свою файловую систему. Инструмент командной строки ncdu лучше подходит для этой задачи.

Установка в Ubuntu:

$ sudo apt-get install ncdu

Использование:

Просто введите ncdu [path] в командной строке. Через несколько секунд для анализа пути вы увидите что-то вроде этого:

$ ncdu 1.11 ~ Use the arrow keys to navigate, press ? for help
--- / ---------------------------------------------------------
.  96,1 GiB [##########] /home
.  17,7 GiB [#         ] /usr
.   4,5 GiB [          ] /var
    1,1 GiB [          ] /lib
  732,1 MiB [          ] /opt
. 275,6 MiB [          ] /boot
  198,0 MiB [          ] /storage
. 153,5 MiB [          ] /run
.  16,6 MiB [          ] /etc
   13,5 MiB [          ] /bin
   11,3 MiB [          ] /sbin
.   8,8 MiB [          ] /tmp
.   2,2 MiB [          ] /dev
!  16,0 KiB [          ] /lost+found
    8,0 KiB [          ] /media
    8,0 KiB [          ] /snap
    4,0 KiB [          ] /lib64
e   4,0 KiB [          ] /srv
!   4,0 KiB [          ] /root
e   4,0 KiB [          ] /mnt
e   4,0 KiB [          ] /cdrom
.   0,0   B [          ] /proc
.   0,0   B [          ] /sys
@   0,0   B [          ]  initrd.img.old
@   0,0   B [          ]  initrd.img
@   0,0   B [          ]  vmlinuz.old
@   0,0   B [          ]  vmlinuz

Удалите выделенный в данный момент элемент с помощью d , выйдите с помощью CTRL + c

ответил Martin Thoma 21 42013vEurope/Moscow11bEurope/MoscowThu, 21 Nov 2013 12:22:05 +0400 2013, 12:22:05
0

ls -S сортирует по размеру. Затем, чтобы показать размер, ls -lS дает длинное (-l), отсортировано по размеру (-S). Я обычно тоже добавляю -h, чтобы было легче читать, поэтому ls -lhS.

ответил Thanatos 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 18 Sep 2011 22:43:56 +0400 2011, 22:43:56
0

Просто и быстро:

find . -mindepth 1 -maxdepth 1 -type d | parallel du -s | sort -n

* требуется GNU Parallel .

ответил pje 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 26 Sep 2016 20:04:57 +0300 2016, 20:04:57
0

Думаю, я понял, что ты хочешь делать. Это даст отсортированный список всех файлов и всех каталогов, отсортированный по размеру файла и размеру содержимого в каталогах.

(find . -depth 1 -type f -exec ls -s {} \;; find . -depth 1 -type d -exec du -s {} \;) | sort -n
ответил dvorak 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 18 Sep 2011 23:01:28 +0400 2011, 23:01:28

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132