Как найти общий размер файлов

There are at least three ways to get the «sum total of all the data in files and subdirectories» in bytes that work in both Linux/Unix and Git Bash for Windows, listed below in order from fastest to slowest on average. For your reference, they were executed at the root of a fairly deep file system (docroot in a Magento 2 Enterprise installation comprising 71,158 files in 30,027 directories).

1.

$ time find -type f -printf '%sn' | awk '{ total += $1 }; END { print total" bytes" }'
748660546 bytes

real    0m0.221s
user    0m0.068s
sys     0m0.160s

2.

$ time echo `find -type f -print0 | xargs -0 stat --format=%s | awk '{total+=$1} END {print total}'` bytes
748660546 bytes

real    0m0.256s
user    0m0.164s
sys     0m0.196s

3.

$ time echo `find -type f -exec du -bc {} + | grep -P "ttotal$" | cut -f1 | awk '{ total += $1 }; END { print total }'` bytes
748660546 bytes

real    0m0.553s
user    0m0.308s
sys     0m0.416s

These two also work, but they rely on commands that don’t exist on Git Bash for Windows:

1.

$ time echo `find -type f -printf "%s + " | dc -e0 -f- -ep` bytes
748660546 bytes

real    0m0.233s
user    0m0.116s
sys     0m0.176s

2.

$ time echo `find -type f -printf '%sn' | paste -sd+ | bc` bytes
748660546 bytes

real    0m0.242s
user    0m0.104s
sys     0m0.152s

If you only want the total for the current directory, then add -maxdepth 1 to find.


Note that some of the suggested solutions don’t return accurate results, so I would stick with the solutions above instead.

$ du -sbh
832M    .

$ ls -lR | grep -v '^d' | awk '{total += $5} END {print "Total:", total}'
Total: 583772525

$ find . -type f | xargs stat --format=%s | awk '{s+=$1} END {print s}'
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
4390471

$ ls -l| grep -v '^d'| awk '{total = total + $5} END {print "Total" , total}'
Total 968133

О LENOVO

+

О LENOVO

  • Наша компания

  • Новости

  • Контакт

  • Соответствие продукта

  • Работа в Lenovo

  • Общедоступное программное обеспечение Lenovo

КУПИТЬ

+

КУПИТЬ

  • Где купить

  • Рекомендованные магазины

  • Стать партнером

Поддержка

+

Поддержка

  • Драйверы и Программное обеспечение

  • Инструкция

  • Инструкция

  • Поиск гарантии

  • Свяжитесь с нами

  • Поддержка хранилища

РЕСУРСЫ

+

РЕСУРСЫ

  • Тренинги

  • Спецификации продуктов ((PSREF)

  • Доступность продукта

  • Информация об окружающей среде

©

Lenovo.

|
|
|
|

  1. Определение
  2. Единица измерения
  3. Как определить размер файла?
  4. Как определить размер группы файлов?
  5. Ограничения в размере файла при передаче
  6. Как уменьшить размер файла?

Во время работы на компьютере часто появляется необходимость узнать размер файла. Это позволяет рассчитать, поместится ли он на цифровом носителе, при переносе или увидеть, сколько памяти занимает папка в памяти ПК. Рассмотрим подробно данное понятие и способ пошагово вывести информацию о размере на экран, различные манипуляции, которые могут пригодиться во время работы.

Определение

Размером файла называется объем пространства, которое он занимает на жестком диске, портативном носителе или в облачном хранилище. Этот показатель напрямую зависит от количества информации, содержащейся в файле.

Единица измерения

Размер файла измеряется в байтах (Б или b), и это является самым маленьким количеством данных. Обычно папка или иной вид информации (изображение, песня, электронная книга) имеет выражение веса в килобайтах (КБ или kb). Один килобайт эквивалентен 1024 байтам.

Более крупными единицами измерения являются мегабайты (МБ или mb) и гигабайты (ГБ или gb), равные 1024 килобайтам и 1024 мегабайтам соответственно. Из используемых в повседневной работе с ПК, наибольшей единицей выражения веса файла является терабайт (ТБ или tb), который эквивалентен 1024 гигабайтам.

В этих же единицах измерения определяется все пространство памяти на ПК, различных гаджетах и портативных носителях (флеш-карта, внешний жесткий диск и т.д.). И предельное количество файлов, которое можно загрузить в устройство, зависит от количества свободного пространства.

Как определить размер файла?

1. Наведите курсор мыши на файл и щелкните по нему правой кнопкой.

Вызов контекстного меню

2. В появившемся контекстном меню выберите пункт «свойства» и щелкните на него.

3. Нужные данные можно увидеть в поле «размер».

Просмотр свойств файла

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

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

1. Выделите элементы, вес которых нужно определить. Это можно сделать, щелкнув по файлу левой кнопкой мыши и растянув появившуюся рамку на все папки. При этом следует удерживать кнопку мышки. Также можно выделить элементы, кликнув по одному из них, а затем, нажав клавишу Ctrl, щелкнуть поочередно по всем остальным.

Выделение группы файлов

2. Поставить курсор на один из выделенных элементов и кликнуть по нему правой кнопке мыши.

Вызов контекстного меню над группой файлов

3. В появившемся контекстном меню выберите пункт «Свойства» и кликните по нему.

Просмотр свойств группы файлов

4. В пункте «размер» будет обобщённая информация о размере всех выбранных элементов.

Для поиска файлов большого размера с целью последующего удаления ненужных данных можно воспользоваться известной утилитой CCleaner. Кроме очистки ПК, она может отображать размер элементов. Для этого нужно выбрать пункт «Сервис» — «Анализ дисков». Впоследствии будет приведена диаграмма занимаемой памяти с подробной таблицей размера файлов различных типов.

Ограничения в размере файла при передаче

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

  • Наблюдается недостаток места в памяти;
  • Требуется закачать файл на веб-ресурс (файлообменник или, к примеру, сайт по поиску работы), который выставил ограничения;
  • Проводится оптимизация сайта для убыстрения загрузки у пользователей с низкой скоростью передачи данных.

Как уменьшить размер файла?

Если по каким-то причинам нужно уменьшить вес файла, это можно сделать путем нехитрых манипуляций. Для каждого типа есть свой способ сжать элемент.

Документ. Если нужно быстро прикрепить или передать документ, то будет целесообразно снизить его вес. Для этого можно:

  • Сохранить в формате docx, по сравнению с doc, он занимает меньше места. Разница ощутимая. Чтобы сделать это, следует открыть документ, выбрать пункт меню «Файл», затем «Преобразовать»;
  • Корректно работать с картинками. А значит, не просто их копировать в текстовый документ, а вставлять через пункт «Вставить рисунок». Чтобы существенно уменьшить размер, следует вкладывать отредактированные картинки с меньшим весом. Также можно при сохранении воспользоваться кнопкой «Сервис» и задать единый размер для всех картинок в документе посредством пункта меню «Сжать рисунки»;
  • Много места могут занимать и шрифты, которые не установлены в ПК. Чтобы избавиться от них, следует убрать галочку в пункте меню «внедрить шрифты в файл» (путь «Файл» -> «Параметры» -> «Сохранение»).

PDF. Файл PDF является универсальным, так как определяется большинством ОС. Они безопасны, и зачастую в этом формате сохраняют сканированные документы. Но их пересылка может быть затруднительна из-за их немалого размера.

Их можно сделать чуть легче с помощью Adobe Acrobat Reader, для этого достаточно кликнуть на «Уменьшить размер файла». Для пересылки подойдет и архивация. Чтобы ощутимо уменьшить вес, можно воспользоваться онлайн-сервисами, например, Smallpdf — ресурс для автоматического сжатия файла PDF. Сайт удобен тем, что не требует никаких дополнительных манипуляций, достаточно загрузить элемент, а затем уже скачать уменьшенный аналог. Также им можно сразу же поделиться по электронной почте, загрузить в облако. Весь процесс занимает минимум времени.

Сжать PDF

PDF Creator — бесплатная утилита, способная легко конвертировать документы в данный формат, а также уменьшить размер готового файла. Чтобы сделать легче документ PDF, следует открыть его в программе, а затем нажать на «Печать» — «Свойства» — «Бумага/качество» — «Дополнительно». Здесь нужно задать для DPI более низкое значение, это уменьшит разрешение и, как следствие, размер.

Папка. Наиболее распространенный способ уменьшить размер папки с файлами — архивация. Она позволяет уменьшить вес, не теряя качества содержимого. Хороший способ хранения и передачи различных элементов.

Есть специальные программы для упаковки файлов и папок большого размера. Наиболее известные для Windows — 7-Zip (бесплатный архиватор) и WinRAR (платная программа с хорошей производительностью). Чтобы архивировать файлы на ПК с установленной утилитой достаточно кликнуть на объект правой кнопкой мыши и перейти в пункт «Добавить в архив» и выбрать логотип программы.

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

Фотографии. Фото и иные изображения могут иметь действительно большой размер. Для уменьшения подобных файлов формата JPG (одного из наиболее распространенных), чаще всего, используется сжатие. Сделать это можно с помощью утилит:

  • Paint и Paint.NET— стандартная программа коррекции изображения. С ее помощью можно сделать меньше разрешение, что в разы снизит вес. Для этого следует выбрать пункт меню «Изменить размер», кликнув мышкой. В появившемся окне задается более низкое значение одного из параметров. Это влечет за собой автоматическое изменение остальных параметров, в соответствии с пропорциями фото;
  • Photoshop — редактор цифровых изображений для профессионалов. Здесь, для уменьшения веса фото, с сопутствующим снижением качества следует выбрать пункт меню File, затем Save for Web. Далее откроется окошко, в котором будет представлено исходное изображение и сохраненное для веб, под каждым пишет вес.

Еще один вариант — уменьшить значения ширины или высоты в пикселях или в процентах. При этом нужно следить за соотношением значений сторон, пропорцией. Сжатое изображение теряет качество и его уже не вернуть, поэтому следует сохранять и исходную картинку.

Аудио. Формат аудиофайлов .mp3, .aac означает, что файл уже сжат. Дальнейшие манипуляции приведут к потере качества. Звуковые файлы формата .wav, .aiff можно немного отредактировать, чтобы уменьшить размер.

Для этого их можно сохранить в виде .mp3 или .flac файла, попутно следует задать меньший битрейт. Это повлечет некоторую потерю качества. К примеру, 128 Кбит/сек. — звук FM-радио, 320 Кбит/сек. — звучание диска CD. Чтобы внести подобные изменения, потребуется утилита, подойдет любой бесплатный аудиоредактор.

Видео. Касательно видеофайла ситуация аналогична: сжатие несет потерю качества, для редактирования с целью уменьшения объема занимаемой памяти потребуется видеоредактор. Подойдет и самый простой, бесплатный.

С помощью утилиты можно обрезать видео, убрать лишнее и, заодно, снизить вес. Это делается просто — отмечается участок или несколько, которые можно убрать, и вырезается. Еще один способ — конвертировать видео в более компактный формат, выбрать нужный кодек и контейнер. Наиболее экономным будет MP4 (DiVX, MPEG2 тоже могут стать оптимальным решением). Также можно повлиять на качество и разрешение видео, задать битрейт. Некоторые программы позволяют установить и вес конечного файла. Если параметры не менять кардинально, то потеря качества не будет столь ощутима, но место, занимаемое на жестком диске уменьшится.

Таким образом, узнать вес файла и уменьшить его размер достаточно просто.  Следует в соответствии с типом элемента произвести ряд соответствующих манипуляции. Это позволит легко обмениваться данными и экономить место на жестком диске, съемном носителе или в сети Интернет.

Обзор проводников с показом размера папок

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

Проводники с показом размера папок

1. Первая в этом списке будет программа с названием TreeSize Free.

Небольшая и бесплатная программа которая очень удобно отображает размер и количество файлов в папке. Также показываются скрытые файлы. Приложение англоязычное, но это никакого дискомфорта в пользовании не предоставляет. Присутствуют разные способы сортировки и фильтрации для удобного пользования.

Скачать TreeSize Free можно по следующим ссылкам ниже :

2. Следующий полезный проводник в нашем обзоре имеет название Explorer++.

Является бесплатной русскоязычной программкой которая имеет хороший функциональный набор для удобного просмотра папок. Есть также функция показа скрытых файлов и показ их размера в байтах, килобайтах, мегабайтах, гигабайтах. Присутствует функция расширенного поиска. В целом хорошая замена стандартному файловому менеджеру.

Скачать Explorer++ можно по следующим ссылкам ниже :

3. Следующее приложение для обзора имеет название Folder Size Explorer.

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

Скачать Folder Size Explorer можно по следующим ссылкам ниже :

4. Программа под номером четыре называется Q-Dir.

Стоит отдать должное этому проводнику в первую очередь за разнообразие отображения панели, например в окне может быть показано 4, 3, или 2 панели, при том что их отдельно можно настроить под себя. Программка распространяется бесплатно и имеет выбор из 25 разных языков. Большие размеры папок подчеркиваются, но стандартно размер не подсчитывается. Для активации этой функции нужно сделать следующее:

Нажать клавишу F9 и в открывшимся окне выбрать пункт “Внутренний алгоритм Q-Dir”, после этого обновляем окно и видим результат.

Скачать Q-Dir можно по следующим ссылкам ниже :

5. Проводник под номером пять называется GetFoldersize.

В принципе также является довольно таки функциональным файловым менеджером. Есть возможность выбрать английский и русский язык, но существует некая проблема с отображением шрифта при выборе русского. Для исправления нужно нажать на красную букву А и выбрать там один из таких шрифтов: Courier, MS San Serif, Fixedsys.

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

Скачать GetFoldersize можно по следующим ссылкам ниже :

6. Следующая программа называется MeinPlatz.

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

Скачать MeinPlatz можно по следующим ссылкам ниже:

7. Седьмая предпоследний проводник в обзоре имеет название WizTree.

Самое приятное, что понравилось в этой программе, так это скорость сканирования локальных дисков. Сканирование практически моментальное, у меня 183 гигабайта заняло 2,39 секунды. Приятный интерфейс и хорошая скорость работы делает этот проводник хорошим решением в простых повседневных задачах. Также стоит отметить очень полезную функцию которая поможет кардинально очистить жесткий диск от самых больших файлов, называется она “Топ 100 больших файлов”.

Скачать WizTree можно по следующим ссылкам ниже:

8. Последняя в обзоре программка с названием WinDirStat.

С помощью данной утилиты вы сможете просматривать детальную информацию о файловой структуре Вашего жесткого диска. Вам будет предоставлена специальная диаграмма, которая показывает размеры ваших данных в разных цветах. Каждый цвет принадлежит определенному типу расширения. Русский язык и бесплатность, это то что дает вам эта утилита.

Скачать WinDirStat можно по следующим ссылкам ниже:

Думаю восемь утилит дает возможность выбрать Вам проводник с показом размера папок. Обзор на этом закончен.

Источник

Как узнать размер папок на диске с помощью PowerShell

Большинство пользователей Windows привыкли, что самый простой способ получить размер папки – открыть ее свойства в Проводнике Windows. Более опытные предпочитают использовать такие утилиты, как TreeSize или WinDirStat. Но, если вам нужно получить более детальную статистику по размеру папок в конкретном каталоге, или исключить определенные типы файлы, в этом случае лучше воспользоваться возможностями PowerShell. В этой статье мы покажем, как быстро получить размер определенного каталога на диске (или всех вложенных каталогов) с помощью PowerShell.

Для получения размеров файлов и каталогов в PowerShell можно воспользоваться командами Get-ChildItem (алиас gci) и Measure-Object (алиас measure).

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

Например, чтобы получить размер папки c:ps, выполните команду:

Get-ChildItem c:iso | Measure-Object -Property Length -sum

Как вы видите, общий размер файлов в данном каталоге указан в поле Sum и составляет около 2 Гб (размер указан в байтах).

Чтобы преобразовать размер в более удобные Мб или Гб, используйте такую команду:

(gci c:iso | measure Length -s).sum / 1Gb

(gci c:iso | measure Length -s).sum / 1Mb

Для округлений результата до двух символов после запятой, выполните команду:

» <0:N2>GB» -f ((gci c:iso | measure Length -s).sum / 1Gb)

Чтобы посчитать суммарный размер всех файлов определенного типа в каталоге используйте такую команду (к примеру, мы хотим получить общий размер ISO файлов в папке):

(gci c:iso *.iso | measure Length -s).sum / 1Mb

Указанные выше команды позволяют получить только суммарный размер файлов в указанной директории. Если в папке содержаться вложенные каталоги, размер файлов в этих каталогах не будет учтен. Для получения общего размера всех файлов в каталоге с учетом вложенных директорий нужно использовать параметр –Recurse. Получим суммарный размер всех файлов в папке c:Windows.

» <0:N2>GB» -f ((gci –force c:Windows –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)

Чтобы учитывать размер скрытых и системных файлов я дополнительно указал аргумент –force.

Итак, размер каталога C:Windows на нашем диске составляет около 16 Гб.

Можно получить размер всех вложенных папок первого уровня в указанном каталоге. Например, нам нужно получить размер всех профилей пользователей в папке C:users.

gci -force ‘C:Users’-ErrorAction SilentlyContinue | ? < $_ -is [io.directoryinfo] >| % <
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % < $len += $_.length >
$_.fullname, ‘ <0:N2>GB’ -f ($len / 1Gb)
>

% — это алиас для цикла foreach-object.

Идем дальше. Допустим ваша задача – узнать размер каждого каталога в корне системного жесткого диска и представить информацию в удобной для анализа табличной форме с возможностью сортировки по размеру каталогов. Для этого воспользуемся командлетом Out-GridView.

Для получения информации о размере каталогов на диске C: выполните следующий PowerShell скрипт:

$targetfolder=’C:’
$dataColl = @()
gci -force $targetfolder -ErrorAction SilentlyContinue | ? < $_ -is [io.directoryinfo] >| % <
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % < $len += $_.length >
$foldername = $_.fullname
$foldersize= ‘<0:N2>‘ -f ($len / 1Gb)
$dataObject = New-Object PSObject
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldername” -value $foldername
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldersizeGb” -value $foldersize
$dataColl += $dataObject
>
$dataColl | Out-GridView -Title “Размер вложенных каталогов”

Как вы видите перед вами должно появиться графическое представление таблицы, в которой указаны все папки в корне системного диска C: и их размер. Щелкнув по заголовку столбца таблицы, вы можете отсортировать папки по размеру.

Источник

Как найти большие файлы в Windows 10

Если вы хотите быстро освободить место на вашем компьютере с Windows, лучший способ сделать это — найти большие файлы на вашем компьютере с Windows 10 и избавиться от них, если они больше не нужны. Вопрос в том, как вы будете искать большие файлы на вашем компьютере?

Как только такие файлы найдены, вам решать, что вы хотите с ними делать. Если вы не хотите сразу их удалять, вы можете перенести их в облачное хранилище или на внешний жесткий диск.

Найти большие файлы в Windows 10 с помощью проводника

File Explorer поставляется с множеством скрытых функций, позволяющих упорядочивать, сортировать и находить файлы на вашем компьютере. Одна из его возможностей — помочь вам найти файлы определенного размера на вашем компьютере. Используя эту функцию, вы можете найти эти захламленные файлы и удалить их.

Однако прежде чем сделать это, вам нужно сначала включить опцию скрытых файлов. Это необходимо для того, чтобы Explorer также искал большие скрытые файлы в дополнение к поиску обычных файлов.
Однако будьте осторожны при работе со скрытыми файлами. В большинстве случаев — это файлы, связанные с системой и приложениями, которые, если вы удалите их, приведут к сбоям в работе ваших приложений и даже к краху всей системы. Прежде чем удалять что-либо, просто убедитесь, что вы знаете, что это такое, и все будет в порядке.

  1. Откройте меню «Пуск», введите show hidden files and folders и найдите «Показать скрытые», после нажмите «Показать скрытые файлы и папки»
  2. Когда откроется диалоговое окно, нажмите на “Показать параметры”
  3. Когда откроется диалоговое окно, нажмите на вкладку «Вид» вверху. Вы увидите различные параметры проводника, которые вы можете изменить.
    Найдите опцию «Показать скрытые файлы, папки и диски» и поставьте галочку. Затем нажмите кнопку «ОК», чтобы сохранить изменения.
  4. Дважды щелкните по ярлыку «мой компьютер» на рабочем столе, чтобы запустить проводник. Когда утилита запустится, нажмите на поле поиска в правом верхнем углу и введите в это поле слово «файлы».
  5. Новый пункт меню будет добавлен в верхней части экрана. Нажмите на недавно добавленный элемент с надписью «Поиск», чтобы просмотреть дополнительные параметры.
    Выберите параметр «Размер», а затем выберите соответствующий параметр из списка. Это позволит вам найти большие файлы, доступные на вашем компьютере.
  6. Если то, что вы считаете большим файлом, недоступно в меню по умолчанию, введите «размер:> 1 ГБ» (замените 1 ГБ своим размером) в поле поиска и нажмите «Enter». Он будет искать только те файлы, которые больше указанного вами размера.
  7. Когда появятся результаты поиска, щелкните правой кнопкой мыши по любому пустому месту и выберите «Сортировать по», затем «Размер» и «По убыванию». Это обеспечит отображение самого большого файла в верхней части результатов.

Поиск больших файлов в Windows 10 с помощью командной строки

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

  1. Введите cmd и нажмите «запуск от имени администратора», чтобы запустить утилиту.
  2. Когда запустится командная строка, введите следующие команды и нажмите Enter :
    Найти файлы размером 1 МБ или более:
    forfiles /S /M * /C «cmd /c if @fsize GEQ 1048576 echo @path»

Примерный вывод команды:

Примечание:
В этой команде 1048576 обозначает 1 МБ (1024 * 1024 = 1048576 байт). Вы должны заменить его соответственно. С помощью этой команды вы получите список файлов, размер которых превышает размер (например, 1 МБ), определенный вами в командной строке.
Эта команда печатает полный путь к файлу. Если вам нужно напечатать только имя файла, вы можете использовать @file вместо @path.

  • Команда для поиска файлов размером более 100 МБ
    forfiles /S /M * /C «cmd /c if @fsize GEQ 104857600 echo @path»
  • Найти файлы размером 1 ГБ или более.
    forfiles /S /M * /C «cmd /c if @fsize GEQ 1073741824 echo @path»

Используйте Largest Files Finder для поиска больших файлов в Windows 10

Проводник и командная строка — не единственные инструменты для поиска больших файлов на компьютере с Windows 10. Есть также несколько сторонних приложений, которые могут помочь вам найти такие файлы.

Largest Files Finder — одно из тех приложений, которое помогает вам найти 100 самых больших файлов на вашем компьютере. Заявление о том, что сканирование дисков емкостью до 200 ГБ занимает всего минуту. Кроме того, он не требует установки и работает прямо из коробки.

  1. Загрузите и запустите приложение на своем компьютере.
  2. Как только оно запускается, то автоматически начинает поиск больших файлов на вашем компьютере. Когда это будет сделано, вы можете просмотреть результаты.

Если вы хотите удалить какие-либо файлы из результатов поиска, вы можете легко это сделать из приложения. Просто щелкните правой кнопкой мыши по любому из файлов и выберите «Удалить».

Найти самые большие файлы на Windows 10 с TreeSize Free

TreeSize Free существует довольно давно, и он помогает вам находить файлы, занимающие много места на ваших компьютерах с Windows. Требуется небольшая установка.

  1. Загрузите, установите и запустите приложение на своем компьютере. Обязательно запустите его с правами администратора, чтобы он мог искать папки, которые он не может иначе.
  2. Вы увидите на экране дерево ваших папок вместе с местом, которое они занимают. Вы можете дважды щелкнуть любую папку, чтобы просмотреть ее подпапки и их размеры.

Затем можно отсортировать каталоги по столбцу «Размер», чтобы самые большие файлы всегда отображались вверху.
Программа также имеет несколько настраиваемых параметров, если вы хотите их использовать. Вы можете использовать нужные опции, которые, по вашему мнению, облегчат поиск больших файлов на вашем компьютере.

Источник

Чтобы подсчитать суммарный размер обычных файлов (S_ISREG) в заданном дереве директорий, пропуская все symlinks, на Питоне:

#!/usr/bin/env python3
import os
from contextlib import suppress

def get_tree_size_scandir(path):
    """Return total size of all regular files in directory tree at *path*."""
    size = 0
    for entry in os.scandir(path):
        with suppress(OSError): # ignore errors for entry & its children
            if entry.is_dir(follow_symlinks=False): # directory
                size += get_tree_size_scandir(entry)
            elif entry.is_file(follow_symlinks=False): # regular file
                size += entry.stat(follow_symlinks=False).st_size
    return size

if __name__ == "__main__":
    import sys
    print(get_tree_size_scandir(sys.argv[1]))

Пример:

$ ./get-tree-size /usr
7217750930

Вывод показывает, что общий размер всех обычных файлов в /usr директории, около 7 GB.

Python, listdir()

Для проверки, я реализовал get_tree_size(), не используя os.scandir():

#!/usr/bin/env python3
import os
import stat
from contextlib import suppress

_dir_flags = os.O_RDONLY

def get_tree_size_listdir_fd(fd):
    """Return total size of all regular files in directory tree at *fd*."""
    size = 0
    for name in os.listdir(fd):
        with suppress(OSError): # ignore errors for entry & its children
            st = os.lstat(name, dir_fd=fd) # don't follow symlinks
            if stat.S_ISDIR(st.st_mode): # directory
                top_fd = os.open(name, _dir_flags, dir_fd=fd)
                try:
                    size += get_tree_size_listdir_fd(top_fd)
                finally:
                    os.close(top_fd)
            elif stat.S_ISREG(st.st_mode): # regular file
                size += st.st_size
    return size

if __name__ == "__main__":
    import sys
    print(get_tree_size_listdir_fd(os.open(sys.argv[1], _dir_flags)))

Результаты одинаковые в данном случае, но в общем случае они могут отличаться (например, os.listdir() возвращает список (сразу все имена), а os.scandir() возвращает итератор, поэтому os.scandir() может учесть больше имен, а os.listdir() пропустит всю директорию, если произойдёт ошибка c получением хотя бы одного имени в директории). Код для примеров адаптирован из Python issue: PEP 471 implementation: os.scandir() directory scanning function.

Внимание: размер файла и занимаемое место на диске могут отличаться.

Bash, du

1) Можно ли как-то решить исходную задачу средствами bash (команда ls и так далее)?

Можно, конечно, но результаты могут немного отличаться (см. тестовые случаи). Если нужны точные результаты, то несложно написать программу, с точным необходимым поведением как показывают примеры кода на Питоне выше.

du -bs . возвращает значение, которое превышает суммарные размеры файлов, например:

$ ls -l
total 8
-rw-rw-r-- 1 me me 820 Oct 25 22:59 get_tree_size_fd.py
-rw-rw-r-- 1 me me 631 Oct 25 23:07 get_tree_size_scandir.py

Суммарный размер: 820 + 631 == 1451:

$ python3 get_tree_size_fd.py .
1451

что ожидаемо (Питон возвращает правильный результат), но du возвращает неверный результат:

$ du -bs .
5547    .

-b опция уже включает в себя --apparent-size (то есть результат уже не отражает занимаемое место на диске — как и хотелось).

@avp упомянул:

du считает также размеры всех каталогов, которые они занимают на диске.

Что подтверждается экспериментами:

$ mkdir dir # создаём пустую директорию
$ python3 get_tree_size_fd.py . # результат ожидаемо не изменился
1451
$ du -bs .                       
9643    .

Результат для du стал больше, что согласуется c комментарием @avp.

Если выключить --apparent-size, то du возвращает занимаемое место на диске:

$ du -s -B1 .
16384   .

Что ещё больше отличается от суммарного размера файлов.

2) Какие могут быть «крайние» случаи, на которых программу стоит протестировать? Ну кроме пустого каталога.

Потестировать имена файлов, директорий, начинающихся на точку (.zshrc, .ssh).

Потестировать на директории со специальными файлами, например, /dev директория может содержать /dev/sda файл, который не является обычным файлом (это диск — блочное устройство S_ISBLK) или FIFO (S_ISFIFO) (можно создать командой: mkfifo /tmp/named_pipe).

Или потестировать на директориях с нечитаемыми записями, например, из-за недостатка прав доступа (командой chmod можно подготовить).

И, конечно, потестировать на директориях, содержащих символические ссылки (S_ISLNK), которые ссылаются как на обычные файлы так и на другие директории.

Для проверки надёжности, можно сгенерировать глубоко-вложенные директории с именами записей разной длины, состоящих из произвольных байтов (всё кроме слэша / и нулевого байта '', если локальная система не вносит своих ограничений).

С, nftw()

Для сравнения, можно посмотреть на примеры кода на С/С++. Для рекурсивного обхода дерева директорий, можно nftw() использовать:

#define _XOPEN_SOURCE 500
#include <ftw.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
  if (argc > 2) {
    fputs("Usage: get-tree-size [<root-dir>]n", stderr);
    exit(2);
  }
  int flags = FTW_PHYS; // do not follow symlinks
  int nopenfd = 100; // maximum number of directories that nftw() may hold
                     // open  simultaneously
  uintmax_t size = 0;
  int visit_path(const char *fpath, const struct stat *sb,
                 int typeflag, struct FTW *ftwbuf)  // nested function -- gcc extension
  {
    if (typeflag == FTW_F) // regular file
      size += sb->st_size;
    return 0; // continue
  };
  const char *dirpath = (argc == 2) ? argv[1] : "."; // default is the current working directory
  if (nftw(dirpath, visit_path, nopenfd, flags))
    exit(1);
  return printf("%" PRIuMAX "n", size) < 0;
}

Пример: $ gcc get-tree-size-ftw.c && ./a.out

Чтобы передать дополнительные переменные (size) в visit_path() обратный вызов, gcc позволяет использовать вложенные функции.

В общем случае, для более тонкого контроля обхода дерева директорий, к примеру, чтобы пропустить всё внутри .git и других подобных директорий, есть fts_open() API, добавив fnmatch() API, можно реализовать аналог команды:

$ find -name .git -prune -o -type f -name *.txt -print

С, readdir()

При желании, можно руками с помощью readdir() рекурсивный обход директории выполнить:

#define _XOPEN_SOURCE 700
#include <dirent.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <inttypes.h>
#include <string.h>

static uintmax_t get_tree_size_readdir(int dirfd)
{
  DIR *dirp;
  if (!(dirp = fdopendir(dirfd)))
    return 0; //NOTE: ignore errors from open,openat,fdopendir here
  uintmax_t size = 0;
  for (struct dirent* entry; (entry = readdir(dirp)); ) {
    // skip ".", ".." entries
    size_t namelen = strlen(entry->d_name);
    if (entry->d_name[0] == '.' // 1 <= namelen <= NAME_MAX
        && (namelen == 1 || (entry->d_name[1] == '.' && namelen == 2)))
      continue;
    struct stat statbuf;
    if(fstatat(dirfd, entry->d_name, &statbuf, AT_SYMLINK_NOFOLLOW))
      continue; //NOTE: ignore errors
    if (S_ISREG(statbuf.st_mode)) // count size of regular files only
      size += statbuf.st_size;
    else if (S_ISDIR(statbuf.st_mode)) { // count the size in subdirectories
      int fd = openat(dirfd, entry->d_name, O_RDONLY); 
      size += get_tree_size_readdir(fd); //NOTE: if nested deeply; it may exceed `ulimit -n`
      close(fd);
    }
  }
  //NOTE: ignore readdir() errors
  closedir(dirp); //NOTE: let the caller to invoke rewinddir() if necessary
  return size;
}
  • директория задаётся с помощью dirfd это позволяет избежать каждый раз от корня все пути просматривать, так как entry->d_name содержит только последнюю часть пути. В противном случае пришлось бы создавать путь от входной (с которой вызов начался) директории каждый раз, прежде чем путь в stat() передать
  • специальные имена "." и ".." явно пропускаются
  • используется AT_SYMLINK_NOFOLLOW, чтобы не следовать по символическим ссылкам, чтобы получить информацию о самой записи (entry)
  • ошибки по индивидуальным записям явно игнорируются
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
  if (argc > 2) {
    fputs("Usage: get-tree-size [<root-dir>]n", stderr);
    exit(2);
  }
  const char *dirpath = (argc == 2) ? argv[1] : "."; // default is the current working directory
  return printf("%" PRIuMAX "n", get_tree_size_readdir(open(dirpath, O_RDONLY))) < 0;
}

Пример:

$ gcc get-tree-size-readdir.c && ./a.out

С++, <filesystem>

В C++ рекурсивно обойти дерево директорий можно используя <filesystem> библиотеку:

#include <experimental/filesystem>
#include <system_error>
#include <iostream>

namespace fs = std::experimental::filesystem;

int main(int argc, char* argv[])
{
  if (argc > 2) {
    std::cerr << "Usage: get-tree-size [<root-dir>]n";
    std::exit(2);
  }
  uintmax_t size = 0;
  fs::path dirpath = (argc == 2) ? argv[1] : fs::current_path();
  for (auto&& entry : fs::recursive_directory_iterator(
         dirpath, fs::directory_options::skip_permission_denied)) {
    std::error_code ignore_error;
    if (fs::is_regular_file(fs::symlink_status(entry, ignore_error))) {
      size += fs::file_size(entry);
    }
  }
  std::cout << size << 'n';
}
  • символические ссылки, указывающие как на директории так и на обычные файлы пропускаются
  • "." и ".." записи также пропускаются
  • ошибки доступа и ошибки при чтении статуса файла игнорируются, но цикл может исключения выбрасывать в случае других ошибок.

Пример: $ g++ -std=c++11 *.cc -lstdc++fs && ./a.out (для <experimental/filesystem>). В С++17 можно просто #include <filesystem> использовать. Библиотека также доступна как #include <boost/filesystem.hpp>:

$ sudo apt-get install libboost-{file,}system-dev  # install Boost on Ubuntu
$ g++ -std=c++11 *.cc -lboost_{file,}system && ./a.out

Все варианты кода для подсчёта суммарного размера выдают один и тот же результат в обычных случаях, но возможны отличия, когда исключительные ситуации по разному обрабатываются.

Производительность ограничивается скоростью диска. Если мета-данные уже закэшированы в памяти, то вариант с <filesystem> медленнее, чем nftw() и readdir(), которые похоже себя ведут. <filesystem> код только немного медленнее кода на Питоне.

Понравилась статья? Поделить с друзьями:
  • Майнкрафт как найти место где тебя убили
  • Как составить родословное древо семьи схема
  • Как найти свой тотальный диктант
  • Как правильно комиссия в составе составила или составили акт
  • Как найти на листе слово