powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Найти 20 самых больших файлов с помощью shell
11 сообщений из 11, страница 1 из 1
Найти 20 самых больших файлов с помощью shell
    #37625607
1123Alex1233
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста, как найти 20 самых больших файлов на диске shell-скриптом?
...
Рейтинг: 0 / 0
Найти 20 самых больших файлов с помощью shell
    #37625911
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1123Alex1233,

find . -type f -print0| xargs -0 ls -s | sort -rn | awk '{size=$1/1024; printf("%dMb %s\n", size,$2);}' | head -n 20
...
Рейтинг: 0 / 0
Найти 20 самых больших файлов с помощью shell
    #37626046
fabler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов1123Alex1233,

find . -type f -print0| xargs -0 ls -s | sort -rn | awk '{size=$1/1024; printf("%dMb %s\n", size,$2);}' | head -n 20
Find /
...
Рейтинг: 0 / 0
Найти 20 самых больших файлов с помощью shell
    #37626047
fabler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fablerАндрей Панфилов1123Alex1233,

find . -type f -print0| xargs -0 ls -s | sort -rn | awk '{size=$1/1024; printf("%dMb %s\n", size,$2);}' | head -n 20
Find /
Или в директории соотв. диска
...
Рейтинг: 0 / 0
Найти 20 самых больших файлов с помощью shell
    #37626476
1123Alex1233
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прокоментируйте этот скрипт пожалуйста.
...
Рейтинг: 0 / 0
Найти 20 самых больших файлов с помощью shell
    #37626515
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфиловfind . -type f -print0| xargs -0 ls -s | sort -rn | awk '{size=$1/1024; printf("%dMb %s\n", size,$2);}' | head -n 20ИМХО head лучше сделать сразу после сортировки, так как нет смысла переводить в мегабайты размеры остальных файлов.
...
Рейтинг: 0 / 0
Найти 20 самых больших файлов с помощью shell
    #37626899
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
du -ak ./ | sort -rn -k 1,1 | head -20
...
Рейтинг: 0 / 0
Найти 20 самых больших файлов с помощью shell
    #37627063
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleИМХО head лучше сделать сразу после сортировки, так как нет смысла переводить в мегабайты размеры остальных файлов.Выйгрыш будет совсем незначительный - зависит от буфера awk:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
~]# perl -e 'print (("q" x 20 . "\n") x 2000)'| strace -o1 awk {'print $1'}| head -n 1
qqqqqqqqqqqqqqqqqqqq
~]# tail 1
fstat64(0, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
read(0, "qqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqq"..., 1024) = 1024
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f62000
read(0, "qqqq\nqqqqqqqqqqqqqqqqqqqq\nqqqqqq"..., 1024) = 1024
write(1, "qqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqq"..., 1024) = 1024
read(0, "qqqqqqqqq\nqqqqqqqqqqqqqqqqqqqq\nq"..., 1024) = 1024
write(1, "qqqq\nqqqqqqqqqqqqqqqqqqqq\nqqqqqq"..., 1024) = -1 EPIPE (Broken pipe)
--- SIGPIPE (Broken pipe) @ 0 (0) ---
+++ killed by SIGPIPE +++
~]# perl -e 'print (("q" x 20 . "\n") x 2000)'| strace -o1 awk {'print $1; fflush()'}| head -n 1
qqqqqqqqqqqqqqqqqqqq
~]# tail 1
fstat64(0, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbf8c3128) = -1 EINVAL (Invalid argument)
fstat64(0, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
read(0, "qqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqq"..., 1024) = 1024
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f91000
write(1, "qqqqqqqqqqqqqqqqqqqq\n", 21)  = 21
write(1, "qqqqqqqqqqqqqqqqqqqq\n", 21)  = -1 EPIPE (Broken pipe)
--- SIGPIPE (Broken pipe) @ 0 (0) ---
+++ killed by SIGPIPE +++
...
Рейтинг: 0 / 0
Найти 20 самых больших файлов с помощью shell
    #37627097
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Прокоментируйте этот скрипт пожалуйста.

Комментирую:

Хороший, добротный скрипт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Найти 20 самых больших файлов с помощью shell
    #37627893
1123Alex1233
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разъясните пожалуйста этот скрипт
...
Рейтинг: 0 / 0
Найти 20 самых больших файлов с помощью shell
    #37627918
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 01/23/2012 10:06 PM, 1123Alex1233 wrote:


find . -type f -print0 --- находит в текущем каталоге и
всех подкаталогах (так работает по умолчанию find) все элементы файловой
системы с типом "файл" (-type f) и печатает их в стандартный выходной поток
через 0-символ (-print0)

xargs -0 -- обрабатывает свой входной поток, выделяя элементы, разделённые
0-символом, и вызывает с этими элементами поданную в качестве rest-аргументов
комманду, которой в данном случае является ls.

ls -s <список файлов> -- выводит список указанных файлов, -s -- с выводом
размера файла.

sort -rn -- сортирует входной поток awk обратном номерном порядке (не знаю
как, поскольку не представляю себе вывод ls -s )

awk'{size=$1/1024; printf("%dMb %s\n", size,$2);}' -- переводит первое поле
входного потока из байт в килобайты (или из килобайт в мегабайты)

head -n 20 -- выводит 20 первых строк входного потока.

Всё вместе делает то, что нужно.

На самом деле, это всё можно проще сделать (почти то же самое):

find . -type f -print0| xargs -0 ls -lhS | head -n 20
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Найти 20 самых больших файлов с помощью shell
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]