Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: apkah в Jul 26, 2005, 18:50



Титла: wget големина на файл
Публикувано от: apkah в Jul 26, 2005, 18:50
Не знам дали точно тук е мястото на тая тема, затова се извинявам предварително ако съм сгрешил.
Интересува ме как мога да разбера размера на файла който искам да сваля без да го свалям реално. Ако има решение не със wget също няма проблем, просто как мога да разбера колко е голям файла. Идеята ми е като зарбера колко е голям да чак тогава да реша дали да го свалям. Трябва ми решение което може да се включи в скрипт, а не решение от рода на: "пускаш го да се тегли и след като ти изпише колко е голям натискаш ctrl-c."

 Някакви идей?


Титла: wget големина на файл
Публикувано от: rpetrov в Jul 26, 2005, 19:22
виж за curl -I/--head

ако сървера върне размера (Content-Length) си :)  - не е задължително да се връща размера :(


Титла: wget големина на файл
Публикувано от: VladSun в Jul 26, 2005, 19:40
Принципно можеш да си поиграеш и с HTТP протокола ...
HEAD


Титла: wget големина на файл
Публикувано от: apkah в Jul 26, 2005, 22:41
Е точно това не ми правеше да си играя с http и ftp протоколите, а като се намеси и ssl става много мътно. Точно за това питах дали има начин да използвам wget, щото той много добре се справя. Иначе ще разгледам curl. За него не се бях сетил.


Титла: wget големина на файл
Публикувано от: sdr в Jul 27, 2005, 11:54
SIZE=`wget --spider <url> | grep <pattern> | cut -d<razdelitel> -f<nomerpole>`
echo $SIZE


Титла: wget големина на файл
Публикувано от: VladSun в Jul 27, 2005, 13:29
Примерен код


#!/usr/bin/perl

use IO::Socket;

if (@ARGV < 1)
{
        print "Specify host !\r\n\r\n";
        exit();
}

if (@ARGV < 2)
{
        print "Specify file !\r\n\r\n";
        exit();
}

$serv = $ARGV[0];
$serv =~ s/http:\/\///ge;

$file = $ARGV[1];

$req = "HEAD /".$file." HTTP/1.1";


$sock = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$serv", PeerPort=>"80")
or die "[+] Connecting ... Could not connect to host.\n\n";

print "[+] Connecting OK\n";
sleep(1);

print "[+] Sending HTTP request\n";

print $sock $req."\r\n";
print $sock "Host: $serv\r\n";
print $sock "Connection: close\r\n\r\n";

while ($answer = <$sock>)
{
        if (index($answer, "Content-Length:")>=0)
        {
                @l = split(/ /, $answer);
                print "[+] File Size: ".$l[1]."\n";
        }
}

close($sock);



Повечето неща са излишни за твоята цел - махай на воля ;)

@sdr

Примерен код

wget --spider ns/mysql.tar | grep Length

--13:44:36--  http://ns/mysql.tar
           => `mysql.tar'
Resolving ns... done.
Connecting to ns:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 163,655,680 [application/x-tar]
200 OK



Титла: wget големина на файл
Публикувано от: sdr в Jul 27, 2005, 17:21
Добре де

SIZE=`wget --spider <url> 2>&1 | grep <pattern> | cut -d<razdelitel> -f<nomerpole>`
echo $SIZE

--------
sdr@sdr ~ $ wget --spider sdr/x1.jpg
--17:21:32--  http://sdr/x1.jpg
           => `x1.jpg'
Преобразувам sdr... 127.0.0.1
Connecting to sdr|127.0.0.1|:80... успешно свързване.
HTTP изпратено искане, чакам отговор... 200 OK
Дължина: 8,318 (8.1K) [image/jpeg]
200 OK

sdr@sdr ~ $ wget --spider sdr/x1.jpg 2>&1 | grep "Дължина:" | cut -f2 -d" "
8,318
sdr@sdr ~ $ wget --spider -S sdr/x1.jpg  2>&1 | grep "Content-Length:" | cut -f4 -d" "
8318