Отображение размеров файлов в отсортированном порядке

6

Как показать список файлов из корневого каталога, отсортированного по размеру файла по убыванию из командной строки?     

задан Andriy Kryvtsun 09.03.2016 в 19:29
источник

5 ответов

3

Из папки:

find . -maxdepth 1 -type f -exec du -h {} + | sort --human-numeric-sort --reverse

Вы можете установить, насколько глубоко он может искать файлы с параметром -maxdepth или без него, чтобы быть рекурсивным.

    
ответ дан EdiD 09.03.2016 в 19:39
2

Если вы хотите перечислить все в каталоге рекурсивно, используйте либо find , либо du с sort :

find /some/path -type f -printf '%s %p\n' | sort -rn
du -h /some/path | sort -rh

Первый будет показывать только файлы и размер в байтах. Последний будет отображать как файлы, так и кумулятивные размеры каталогов, в формате, доступном для человека (с использованием KB, MB и т. Д.). sort соответственно использует числовое значение для первого ( -n ) и читаемое человеком для последнего ( -h ).

С большей сложностью лучшим вариантом будет:

find /some/path -type f -print0 | du --files0-from=- -0h | sort -rzh | tr '%pr_e%' '\n'

du может читать список файлов с нулевым разделением, а find может печатать имена файлов с нулевым именем, используя -print0 . sort может затем взять список размеров и имен NUL-разделителей и отсортировать их, и, наконец, вы замените NUL новыми символами для удобного отображения.

Так как имена файлов и пути могут содержать что угодно, кроме символа ASCII NUL, использование строк с нулевым разделителем будет самым безопасным способом.

Вы также можете получить find , чтобы напечатать размер, как показано в первой команде, но с -printf '%s %pdu' , чтобы по-прежнему использовать строки с нулевым разделителем и пропустить с помощью %co_de% в качестве среднего человека.

    
ответ дан muru 09.03.2016 в 19:38
1

Как сказал @Terrance, ls -lS сортирует файлы в порядке убывания. Для всех файлов работает ls -lSa .

    
ответ дан NoOneIsHere 10.03.2016 в 16:02
0

Достаточно использовать du и sort

du --max-depth 1 * | sort -n -k1

Пример вывода,

$ du --max-depth 1 * | sort -n -k1
4   bin/CS-1400
4   bin/csrc
4   bin/[email protected]
4   bin/EET2350
4   bin/HW6
4   RS232Functions.c
4   RS232Functions.c~
4   Untitled Folder
8   1204686.docx_en-US_zh-CN.docx
8   bin/shell
16  MSUDenver_50th_Formal.png
20  bb0239ba-1718-4778-b19a-3826f36a95cd.png
20  mainLogo.png
24  bin/NAME WITH SPACES
32  bin/ala
32  bin/Online_book
60  bin/HORTON
72  bin/JAVA-OTHER
    
ответ дан Sergiy Kolodyazhnyy 12.03.2016 в 17:44
0

Эта команда будет сортировать по размеру в kb

du -sk * | sort -n

Вы можете изменить его с помощью:

du -sk * | sort -rn
    
ответ дан Cleber Reizen 28.02.2018 в 18:54