2016-03-28 11 views
0

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

(значения в этом выводе служат только в качестве примера

Самый большой размер файла: 2015
размер среднего файла: 1132

так, чтобы получить максимальный размер файла, я бы, вероятно, использовать команду

find . -type f -ls | sort -r -n -k7 | head -n 1

Это будет печатать длинный список нескольких атрибутов и напечатать самый большой из них (в зависимости от их размера файла)

Проблема в том, что я не могу найти способ получить только сам файл размер и ничего больше

Аналогичным образом, я хочу получить средний размер файла.

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

Чтобы получить это довольно легко, просто простое (найти. -type f | wc -l) Большая проблема касается резюме.

В идеале я хотел бы решения, чтобы быть в простом формате

например. echo "Largest file size: $(find . -type f | command | command)"

спасибо.

ответ

0

самый большой файл

find . -type f -printf "%s\t%p\n" | sort -nr | head -1 | cut -f1 

средний размер файла

find . -type f -printf "%s\t%p\n" | awk '{sum+=$1; c++} END{print sum/c}' 

, конечно, когда у вас есть awk нет необходимости делать это дважды

$ find . -type f -printf "%s\t%p\n" | 
    awk 'max<$1{max=$1} 
      {sum+=$1; c++} 
      END{print "largest: "max; print "average: " sum/c}' 

largest: 74 
average: 19 

, конечно, если вы не собираетесь использовать имя файла, которое вы можете изменить на printf "%s"

+0

Команда 'du -s' дает краткое описание использования диска. Разделите количество файлов, и это среднее. –

0

Вы можете использовать вырезать команды напечатать только часть одной линии, выделяемой некоторых разделители

Для самого большого размера файла, вы можете использовать:

echo "Largest file size: $(find . -type f -ls | sort -r -n -k7 | head -n 1 | cut -d' ' -f2)" 

Для среднего размера, несколько вариантов являются жизнеспособный. Вы можете использовать awk:

echo "Average file size: $(find . -type f -ls | sort -r -n -k7 | cut -d' ' -f2 | awk '{ total += $1; count++ } END { print total /count}')" 
+0

Не работает, печатает только пустую командную строку. Вырез должен быть установлен неправильно. Постараюсь немного глубже заглянуть в него.Мое предположение было бы потому, что у файлов не было пробелов между ними после поиска find – Rawrplus

+0

Я только что отредактировал команды как одну строку, возможно, проблему с форматированием на моей стороне, так как в середине команд появилась новая строка. Работает сейчас? –

+0

Нашел решение, ну есть несколько вариантов. Я лично использовал sed, чтобы удалить все символы [: blank:] и вставить одно пробел (пробел) между ними. Ссылка на решение: http://stackoverflow.com/questions/36271115/replacing-unknown-amount-of-blank-spaces-for-x-amount/36271962#36271962 – Rawrplus

Смежные вопросы