Есть ли способ получить размер удаленного файла как
http://api.twitter.com/1/statuses/public_timeline.json
в сценарии оболочки?
Принятое решение не работало на меня, это:
curl -s https://code.jquery.com/jquery-3.1.1.min.js | wc -c
ЗАВИХРЕНИЕ использования для выполнения в "тихом" режиме -s
,
вытягивает только заголовки -I
(чтобы не загружать целый файл)
, затем делают нечувствительный к регистру grep -i
и возвращают второй аргумент с помощью awk $2
.
вывод возвращается как bytes
curl -sI http://api.twitter.com/1/statuses/public_timeline.json | grep -i content-length | awk '{print $2}'
//output: 52
или
curl -sI https://code.jquery.com/jquery-3.1.1.min.js | grep -i content-length | awk '{print $2}'
//output: 86709
или
curl -sI http://download.thinkbroadband.com/1GB.zip | grep -i content-length | awk '{print $2}'
//output: 1073741824
, Если требуется показать, что размер в Килобайтах затем изменяет awk на:
awk '{print $2/1024}'
или Мегабайты
awk '{print $2/1024/1024}'
У меня есть функция оболочки, на основе ответ codaddict , который дает размер удаленного файла в человекочитаемом формате таким образом:
remote_file_size () {
printf "%q" "$*" |
xargs curl -sI |
grep Content-Length |
awk '{print $2}' |
tr -d '\040\011\012\015' |
gnumfmt --to=iec-i --suffix=B # the `g' prefix on `numfmt' is only for systems
# ^ # that lack the GNU coreutils by default, i.e.,
# | # non-Linux systems
# |
# | # in other words, if you're on Linux, remove this
# | # letter `g'; if you're on BSD or Mac, install the GNU coreutils
} # | |
# +----------------------------------------+
Я использую как это ([Cc]ontent-[Ll]ength:)
, потому что я добрался, сервер дают нескольким символ Content-Length при ответе заголовка
curl -sI "http://someserver.com/hls/125454.ts" | grep [Cc]ontent-[Ll]ength: | awk '{ print $2 }'
Accept-Ranges: bytes
Access-Control-Expose-Headers: Date, Server, Content-Type, Content-Length
Server: WowzaStreamingEngine/4.5.0
Cache-Control: no-cache
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: OPTIONS, GET, POST, HEAD
Access-Control-Allow-Headers: Content-Type, User-Agent, If-Modified-Since, Cache-Control, Range
Date: Tue, 10 Jan 2017 01:56:08 GMT
Content-Type: video/MP2T
Content-Length: 666460
$ curl -O -w 'We downloaded %{size_download} bytes\n'
https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7328k 100 7328k 0 0 244k 0 0:00:29 0:00:29 --:--:-- 365k
We downloaded 7504706 bytes
В автоматизированных целях, необходимо будет просто добавить команду к файлу сценария.
другое решение:
ssh userName@IP ls -s PATH | grep FILENAME | awk '{print$1}'
дает Вам размер в КБ
Объединить все вышеупомянутое для меня работы:
URL="http://cdimage.debian.org/debian-cd/current/i386/iso-dvd/debian-9.5.0-i386-DVD-1.iso"
curl --head --silent --location "$URL" | grep -i "content-length:" | tr -d " \t" | cut -d ':' -f 2
Это возвратит просто длину содержания в байтах:
3767500800
Два протеста к другим ответам:
кроме того, можно сделать это без grep/awk или передачи по каналу:
curl 'http://api.twitter.com/1/statuses/public_timeline.json' --silent --write-out 'size_download=%{size_download}\n' --output /dev/null
И тот же запрос со сжатием:
curl 'http://api.twitter.com/1/statuses/public_timeline.json' --silent -H 'Accept-Encoding: gzip,deflate' --write-out 'size_download=%{size_download}\n' --output /dev/null
Предыдущие ответы не будут работать, когда будут перенаправления. Например, если Вы хотите размер debian ISO DVD, он должен использовать - опция местоположения, иначе, размер, о котором сообщают, может иметь что 302 Moved Temporarily
тело ответа, не тот из реального файла.
предположим у Вас есть следующий URL:
$ url=http://cdimage.debian.org/debian-cd/8.1.0/amd64/iso-dvd/debian-8.1.0-amd64-DVD-1.iso
С завихрением, Вы могли получить:
$ curl --head --location ${url}
HTTP/1.0 302 Moved Temporarily
...
Content-Type: text/html; charset=iso-8859-1
...
HTTP/1.0 200 OK
...
Content-Length: 3994091520
...
Content-Type: application/x-iso9660-image
...
Вот почему я предпочитаю использовать HEAD
, который является псевдонимом к эти lwp-request
команда от пакет libwww-perl (на debian). Другой способствует ему, имеет, то, что это разделяет дополнительное \r символы, который упрощает последующую строковую обработку.
Так для получения размера debian ISO DVD можно было сделать, например:
$ size=$(HEAD ${url})
$ size=${size##*Content-Length: }
$ size=${size%%[[:space:]]*}
Обратите внимание на то, что:
Для других оболочек, Вам, вероятно, придется обратиться к sed, awk, grep и др.