我想将其实现为Makefile任务:
# step 1:
curl -u username:password -X POST \
-d '{"name": "new_file.jpg","size": 114034,"description": "Latest release","content_type": "text/plain"}' \
https://api.github.com/repos/:user/:repo/downloads
# step 2:
curl -u username:password \
-F "key=downloads/octocat/Hello-World/new_file.jpg" \
-F "acl=public-read" \
-F "success_action_status=201" \
-F "Filename=new_file.jpg" \
-F "AWSAccessKeyId=1ABCDEF..." \
-F "Policy=ewogIC..." \
-F "Signature=mwnF..." \
-F "Content-Type=image/jpeg" \
-F "file=@new_file.jpg" \
https://github.s3.amazonaws.com/
然而,在第一部分中,我需要获取文件大小(如果容易,则不需要内容类型),所以有些变量:
{"name": "new_file.jpg","size": $(FILE_SIZE),"description": "Latest release","content_type": "text/plain"}
我尝试了这个,但它不起作用(Mac 10.6.7):
$(shell du path/to/file.js | awk '{print $1}')
任何想法如何实现这一目标?
答案 0 :(得分:4)
如果你有GNU coreutils:
FILE_SIZE=$(stat -L -c %s $filename)
-L
告诉它遵循符号链接;没有它,如果$filename
是符号链接,它将为您提供符号链接的大小而不是目标文件的大小。
MacOS stat等效似乎是:
FILE_SIZE=$(stat -L -f %z)
但我无法尝试。 (我把它写成shell命令,而不是make命令。)您可能还会发现-s
选项很有用:
在“shell输出”中显示信息,适用于初始化变量。
答案 1 :(得分:0)
我认为这是解析 ls
输出合法的情况:
% FILE_SIZE=`ls -l $filename | awk '{print $5}'`
击> <击> 撞击>
(不,不是:使用stat
,如Keith Thompson所说)
对于类型,您可以使用
% FILE_TYPE=`file --mime-type --brief $filename`
答案 2 :(得分:0)
作为参考,另一种方法是使用 du
和 -b
字节输出,-s
仅用于摘要。然后 cut
只保留返回字符串的第一个元素
FILE_SIZE=$(du -sb $filename | cut -f1)
这应该以字节为单位返回与@Keith Thompson 答案相同的结果,但也适用于完整目录大小。
额外:我通常为此使用宏。
define sizeof
$$(du -sb \
$(1) \
| cut -f1 )
endef
然后可以这样调用,
$(call sizeof,$filename_or_dirname)