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

17

Хотел бы иметь возможность находить полные пути файлов в дереве каталогов, которые превышают определенный размер (скажем, 10 МБ).

В настоящее время известно о Microsoft Diruse (часть средств поддержки Windows XP с пакетом обновления 2 ), которая делает то, что я хочу, за исключением того, что в ней указаны только размеры каталогов, а не файлы.

Умбер Ферруле
источник

Ответы:

29
forfiles /P D:\ /M *.* /S /D +"01/17/2012"  /C "cmd /c if @fsize gtr 209715200 echo @path @fsize @fdate @ftime"

будет сканировать D: \ и его подкаталоги, искать все файлы, даты последнего изменения которых превышают «17-ЯНВ-2012» и чьи размеры больше или равны 200 МБ, а затем распечатывать их данные.

forfiles включен на некоторых серверах Windows, но не включен по умолчанию в Windows XP. Вы можете извлечь его из пакета "Windows Server 2003 Resource Kit" по адресу http://www.microsoft.com/download/en/details.aspx?id=17657 ( хотя он и предназначен для Windows Server, он работает на Win XP без проблем).

learnScrapy
источник
Превосходно - это сделало то, что я хотел (как только я установил дату для Великобритании 17/01/2012). Благодарю.
Umber Ferrule
6

Это звучит как работа для PowerShell

Get-ChildItem

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

get-childitem | get-member

длина и FullName выглядят интересно, например:

get-childitem |ft fullname, length -auto

Как только вы освоите основы, попробуйте выполнить фильтрацию с помощью оператора where.

get-childitem | where-object {$_.length -gt 10000} |ft fullname, length -auto

Эксперимент с 100000

Гай Томас
источник
Используйте Get-ChildItem -recurse для рекурсивного поиска
themadmax
3

Порт утилит Linux в UnxUtils содержит команду поиска Linux .

Вам следует переименовать find.exe во что-то другое, например, xfind.exe, так как find является встроенной функцией в командной строке Windows. Затем вы можете найти все файлы размером более 1000000 байт:

каталог xfind -size +1000000 -print

Вот документация для команды Linux find , но я не знаю, как именно она была реализована в UnxUtils и для какой версии find.

harrymc
источник
я верю, что GnuWin32 более современен: gnuwin32.sourceforge.net ... плюс всегда есть Cygwin: cygwin.com
квик-кихот
@ ~ quack: Вы правы, только то, что пакет FileUtils в GnuWin32 кажется довольно сложным для установки, требуя довольно много файлов.
Harrymc
справедливо. Я лично пользователь Cygwin. и я, как правило, предпочитаю современные, а не простые в установке. но спасибо за объяснение ваших рассуждений.
шарлатан-кихот
2

Возьмите Command Console LE (которую я недавно очень рекомендовал), бесплатную замену cmd.exe с множеством дополнительных функций, для этого есть команда:PDIR

pdir /s /(fpn z) /[s10485760,]
  • /s означает рекурсивно, запустите команду из каталога, который вы хотите найти.
  • /(fpn z) это формат для отображения результатов, здесь: fullpathfullname size
  • /[s10485760,] означает размер = 10 МБ или больше
Снарк
источник
1

Команда find утилит cygwin делает это. Для вашего требования

найдите полные пути файлов в дереве каталогов, которые превышают определенный размер (скажем, 10 МБ).

это дает результат:

find -size + 10M -type f -printf "% p% s \ n"

-size +10Mдает вам "объекты" больше, чем 10 мегабайт

-type f дает только файлы

-printfпечатает найденные файлы, %pэто путь, %sразмер (в байтах) и \nперевод строки.

Герд Клима
источник
1

Я только что натолкнулся на инструмент командной строки, Disksum , который похож на diruse , но дает две формы вывода:

  • отсортировано по количеству файлов в каталоге (по возрастанию)
  • отсортировано по размеру каталога (по возрастанию)
Умбер Ферруле
источник
1

Я считаю, что использование этого решения более точно с описанием:

Загрузите исполняемый файл командной строки sfk.exe по адресу http://sourceforge.net/projects/swissfileknife/files/.

Используйте это так

skf.exe list -big

Пример вывода (сокращенно):

[listing 50 of 78 files by size:]
        3951 mens\noname_30.mht
        3996 mens\noname_14.mht
        3996 mens\noname_25.mht
        4060 mens\noname_24.mht
        4263 mens\noname_31.mht
        4701 mens\noname_1.mht
       14568 Thumbnail Restore.zip
       45056 netmeter.exe
     [...]
     12337752 rktools.exe
     16826024 sp35378.exe
     16926496 jre-6u30-windows-i586.exe
     19480227 SugarCE-6.2.4.zip
     21073936 vlc-1.1.11-win32.exe
     22083184 EasyPHP-5.3.8.1-setup.exe
     25517642 MPSOFTWARE.phpDesigner.v8.0.0.145-CRD.rar
     31085033 phpdesigner8usb.zip
     48835640 netbeans 7.exe
     58900704 ZendServer-CE-php-5.2.17-5.6.0-Windows_x86.exe    
     491538432 53400105.iso

Если вы хотите только 10 лучших больших файлов, используйте:

skf.exe list -big=10

Вы можете настроить его далее, следуя инструкциям: http://stahlworks.com/dev/index.php?tool=list

vicenteherrera
источник
Замечательный ответ, я ссылался на него здесь; softwarerecs.stackexchange.com/questions/30824/…
DankyNanky
-2

Я знаю, что вопрос касается командной строки, но этот вопрос постоянно возникает в Google, поэтому добавим еще один простой способ - через Проводник.

  1. откройте папку (диск или папку), где вы хотите искать большие файлы в проводнике Windows
  2. в верхнем правом окне поиска введите «size: gigantic» (в этом поле будет автоматически предложен синтаксис и другие возможные параметры)
Jitbit
источник
Вопрос искал ответы командной строки.
Джон
Это хороший и правильный ответ. Это не должно быть опущено.
Zar