有没有办法获得像
这样的远程文件的大小http://api.twitter.com/1/statuses/public_timeline.json
在shell脚本中?
答案 0 :(得分:83)
您可以下载该文件并获取其大小。但我们可以做得更好。
使用curl仅使用-I
选项获取response header。
在响应标题中查找Content-Length:
,后面跟着文件大小(以字节为单位)。
$ URL="http://api.twitter.com/1/statuses/public_timeline.json"
$ curl -sI $URL | grep -i Content-Length
Content-Length: 134
要获取大小,请使用过滤器从上面的输出中提取数字部分:
$ curl -sI $URL | grep -i Content-Length | awk '{print $2}'
134
答案 1 :(得分:19)
其他答案有两点需要注意:
此外,您可以在没有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
答案 2 :(得分:7)
与codaddict's answer类似,但未调用grep
:
curl -sI http://api.twitter.com/1/statuses/public_timeline.json | awk '/Content-Length/ { print $2 }'
答案 3 :(得分:5)
当存在重定向时,前面的答案将不起作用。例如,如果想要debian iso DVD的大小,他必须使用--location选项,否则,报告的大小可能是302 Moved Temporarily
答案体的大小,而不是真实文件的大小。
假设您有以下网址:
$ url=http://cdimage.debian.org/debian-cd/8.1.0/amd64/iso-dvd/debian-8.1.0-amd64-DVD-1.iso
使用curl,您可以获得:
$ 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
,它是来自 libwww-perl 包(在debian上)的lwp-request
命令的别名。它的另一个优点是它剥离了额外的 \ r 字符,这简化了后续的字符串处理。
因此,要检索debian iso DVD的大小,可以做例如:
$ size=$(HEAD ${url})
$ size=${size##*Content-Length: }
$ size=${size%%[[:space:]]*}
请注意:
对于其他炮弹,你可能不得不求助于sed,awk,grep等......
答案 4 :(得分:3)
接受的解决方案对我不起作用,这是:
curl -s https://code.jquery.com/jquery-3.1.1.min.js | wc -c
答案 5 :(得分:3)
使用cURL以静默模式-s
,
仅提取标题-I
(以避免下载整个文件)
然后执行不区分大小写的grep -i
并使用awk $2
返回第二个arg。
输出以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
如果您想以Kilobytes显示大小,请将awk更改为:
awk '{print $2/1024}'
或兆字节
awk '{print $2/1024/1024}'
答案 6 :(得分:0)
将上述所有内容合并到我的作品中:
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
答案 7 :(得分:0)
我有一个基于codaddict's answer的shell函数,它以人类可读的格式提供远程文件的大小:
org 00100h
mov bx, num1
mov cx, 15
mov ax, 0
li:
add ax, [bx]
add bx, 2
sub cx, 1
jnz li
call prt_byte
mov ah, 04ch
int 021h
num1: dw 3, 5, 7, 9, 11, 13, 15, 17, 19, 21,23,25,27,29,31
eoln: db 0dh, 0ah, '$'
prt_byte:
push ax
push bx
push dx
cmp ax, 100
jl skip_h
push ax
mov bl, 100 ; divide ax by 100.
div bl
mov ah, 0
call prt_digit
mul bl ; remove hundreds digit.
mov bx, ax
pop ax
sub ax, bx
skip_h:
cmp ax, 10
jl skip_t
push ax
mov bl, 10 ; divide ax by 10.
div bl
mov ah, 0
call prt_digit
mul bl ; remove tens digit.
mov bx, ax
pop ax
sub ax, bx
skip_t:
call prt_digit
mov dx, offset eoln
mov ah, 9
int 021h
pop dx
pop bx
pop ax
ret
prt_digit:
push ax ; save registers.
push dx
mov dx, ax ; put in correct register.
add dx, '0' ; turn into digit.
mov ah, 2 ; print.
int 021h
pop dx ; restore registers and return.
pop ax
ret
答案 8 :(得分:-1)
我使用这个([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
答案 9 :(得分:-1)
$ 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
出于自动目的,您只需要将命令添加到您的 脚本文件。
答案 10 :(得分:-3)
不同的解决方案:
ssh userName@IP ls -s PATH | grep FILENAME | awk '{print$1}'
为您提供KB的大小