hashedassets是一个命令行工具,将文件复制到基于其内容的文件名 它也写了什么更名什么地图,这样你可以找到你的文件。
这主要目的是,你可以添加一个遥远的未来Expires头到您的组件。使用基于散列的文件名是一个很多比你使用VCS $版本号更好,因为用户只需要下载并没有改变文件。
创建一些源文件
首先,我们创建一个文件被散列:
>>>系统(“MKDIR输入/”)
>>>系统(“MKDIR输入/子目录/”)
>>>系统(“MKDIR图/”)
>>>开放(“输入/ foo.txt的”,“W”)为文件:
... file.write(“富”)
>>>开放(“输入/子目录/跳回到bar.txt”,“W”)为文件:
... file.write(“巴”)
>>>系统(“触摸-t200504072213.12输入/ foo.txt的”)
简单的使用
>>>系统(“hashedassets地图/ map.txt输入/ *。txt的输入/ * / *。txt的输出/”)
MKDIR“产出”
CP“输入/ foo.txt的'输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
>>>打印开(“图/ map.txt”)。阅读()
子目录/跳回到bar.txt:Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
foo.txt的:C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt
>>>系统(“LS输出/”)
C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt
Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
>>>系统(“LS图/”)
map.txt
日志记录级别
如果我们告诉命令要安静,它不打印它在做什么:
>>>系统(“hashedassets -q地图/ map2.txt输入/ *。txt的输入/ * / *。txt的输出/”)
如果我们告诉命令更详细的,它记录的详细信息:
>>>系统(“hashedassets -vvv地图/ map3.txt输入/ *。txt的输入/ * / *。txt的输出/”)
调试级别设置为10
CP“输入/ foo.txt的'输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
修改时间也被保留:
>>> old_stat = os.stat(“输入/ foo.txt的”)
>>> new_stat = os.stat(“输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”)
>>> [(GETATTR(old_stat,道具)== GETATTR(new_stat,道具))
...的道具在('的st_mtime','st_atime的更改“,”st_ino中',)]
[真,真,假]
我们可以很容易地做到这一点有多种格式:
JavaScript的
>>>系统(“hashedassets -n my_callback地图/ map.js输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/ foo.txt的'输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
>>>打印开(“图/ map.js”)。阅读()
VAR my_callback = {
 “foo.txt的”:“C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
 “子目录/跳回到bar.txt”:“Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
};
JSON
>>>系统(“hashedassets -n my_callback地图/ map.json输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/ foo.txt的'输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
>>>打印开(“图/ map.json”)。阅读()
{
 “foo.txt的”:“C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
 “子目录/跳回到bar.txt”:“Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
}
JSONP
>>>系统(“hashedassets -n my_callback地图/ map.jsonp输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/ foo.txt的'输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
>>>打印开(“图/ map.jsonp”)。阅读()
my_callback({
 “foo.txt的”:“C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
 “子目录/跳回到bar.txt”:“Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
});
萨斯
萨斯是在CSS顶部的元语言。
>>>系统(“hashedassets -n my_callback地图/ map.scss输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/ foo.txt的'输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
>>>打印开(“图/ map.scss”)。阅读()
@mixin my_callback($指令,$路径){
  @if $ PATH ==“子目录/跳回到bar.txt”{#$ {}指令:URL(“Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”); }
 如果@else $ PATH ==“foo.txt的”{#$ {}指令:URL(“C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”); }
  @else {
  @warn“没有找到”#“资产清单”{$ PATH};
 #$ {}指令:URL($路径);
 }
}
PHP
>>>系统(“hashedassets -n my_callback地图/ map.php输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/ foo.txt的'输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
>>>打印开(“图/ map.php”)。阅读()
$ my_callback =阵列(
 “子目录/跳回到bar.txt”=>“Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
 “foo.txt的”=>“C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
)
桑达
我们也可以生成一个sed脚本,做了替换我们:
>>>系统(“hashedassets -n my_callback地图/ map.sed输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/ foo.txt的'输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
>>>打印开(“图/ map.sed”)。阅读()
S /子目录 /酒吧 .TXT / Ys23Ag_5IOWqZCw9QGaVDdHwH00 .TXT / G
S / FOO .TXT / C-7Hteo_D9vJXQ3UfzxbwnXaijM .TXT / G
我们还应该能够直接使用此使用sed
>>>开放(“replaceme.html”,“W”)为文件:
... file.write('的栏“)
该脚本,然后应用如下:
>>>系统(“SED -f地图/ map.sed replaceme.html”)
的栏
然而,“。”不被视为通配符,所以下面不工作
>>>开放(“replaceme2.html”,“W”)为文件:
... file.write('的栏“)
>>>系统(“SED -f地图/ map.sed replaceme2.html”)
的栏
与指定-t类型
地图的类型是从文件名来猜测,但你可以指定它还有:
>>>系统(“hashedassets -t JS cantguessmaptype输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/ foo.txt的'输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
指定文件名的长度-l
>>>系统(“hashedassets -l 10地图/ shortmap.json输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/ foo.txt的'输出/ C-7Hteo_D9.txt”
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IO.txt”
>>>系统(“RM输出/ C-7Hteo_D9.txt输出/ Ys23Ag_5IO.txt”)
指定摘要与-d
>>>系统(“hashedassets -d MD5地图/ shortmap.json输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/ foo.txt的'输出/ rL0Y20zC-Fzt72VPzMSk2A.txt”
CP“输入/子目录/跳回到bar.txt''输出/ N7UdGUp1E-RbVvZSTy1R8g.txt”
>>>系统(“RM输出/ rL0Y20zC-Fzt72VPzMSk2A.txt输出/ N7UdGUp1E-RbVvZSTy1R8g.txt”)
重新使用地图
在地图上它在运行之前创建的只复制,由于没有改变文件的程序读取。所以,下面的命令不复制任何文件:
>>>系统(“hashedassets地图/ map.scss输入/ *。txt的输入/ * / *。txt的输出/”)
>>>系统(“hashedassets地图/ map.php输入/ *。txt的输入/ * / *。txt的输出/”)
>>>系统(“hashedassets地图/ map.js输入/ *。txt的输入/ * / *。txt的输出/”)
>>>系统(“hashedassets地图/ map.json输入/ *。txt的输入/ * / *。txt的输出/”)
>>>系统(“hashedassets地图/ map.sed输入/ *。txt的输入/ * / *。txt的输出/”)
>>>系统(“hashedassets地图/ map.jsonp输入/ *。txt的输入/ * / *。txt的输出/”)
>>>系统(“hashedassets地图/ map.txt输入/ *。txt的输入/ * / *。txt的输出/”)
如果我们触摸的输入文件之一,该文件将被读取,但不能复制,因为hashsum是一样的:
>>>系统(“触摸-t200504072214.12输入/ foo.txt的”)
>>>系统(“hashedassets地图/ map.json输入/ *。txt的输入/ * / *。txt的输出/”)
如果我们改变了文件的内容,它会得到一个新的名字:
>>>开放(“输入/ foo.txt的”,“W”)为文件:
... file.write(“foofoo”)
>>>系统(“hashedassets地图/ map.json输入/ *。txt的输入/ * / *。txt的输出/”)
RM“输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt”
CP“输入/ foo.txt的'输出/ QIDaFD7KLKQh0l5O6b8exdew3b0.txt”
如果然后列出该目录中的文件,注意旧文件'输出/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt''是去了:
>>>系统(“LS输出/”)
QIDaFD7KLKQh0l5O6b8exdew3b0.txt
Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
如果我们删除创建的文件之一,它被重建:
>>>系统(“RM输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”)
>>>系统(“hashedassets地图/ map.json输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/子目录/跳回到bar.txt''输出/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt”
>>>系统(“LS输出/”)
QIDaFD7KLKQh0l5O6b8exdew3b0.txt
Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
如果一个文件即将被删除,因为原来的内容改变,它不会重新创建:
>>>系统(“RM输出/ QIDaFD7KLKQh0l5O6b8exdew3b0.txt”)
>>>开放(“输入/ foo.txt的”,“W”)为文件:
... file.write(“foofoofoo”)
>>>系统(“hashedassets地图/ map.json输入/ *。txt的输入/ * / *。txt的输出/”)
CP“输入/ foo.txt的'输出/ NdbmnXyjdY2paFzlDw9aJzCKH9w.txt”
错误处理
然而,如果我们运行此不带参数,它失败:
>>>系统(“hashedassets”,外部= TRUE)
用法:hashedassets [选项] MAPFILE源[...] DEST
hashedassets:错误:您需要至少指定MAPFILE源和目标
要求:
- 在Python的
评论没有发现