|
楼主 |
发表于 2010-4-22 09:48:34
|
显示全部楼层
新需求设计
Pinkme005兄的代码运行良好,稍作修改已成为新包管理器的核心部件。
重新整理一下需求:
1. 生成列表
从stdin读入文件名和路径,获取信息,以csv格式输出到stdout. 信息包括类型,文件名,大小(bytes),权限,uid,gid,最后修改时间,md5sum,可选的Sha256sum
文件名要去掉开始的".", 如输入为"./var/test.txt", 记录为"/var/test.txt", 但文件信息仍从"./var/test.txt"获取.
例如:
- D,/var/test,4096,0664,0,0,121768945
- F,/var/test/a.txt,115,0664,0,0,121768945,da8609e9cd838f5359970d6fe31d7dff
- L,/var/test/b,txt,8,0664,0,0,121768945
复制代码
每个文件一行,目录和链接无校验.
无参数时进入此模式
2. 打印列表内容
按顺序打印类型 大小 文件名即可
大小8字节右对齐
目录输出为'd', 链接输出为'l', 文件输出空格即可' '
-l 参数进入此模式
3. 判断某个文件是否在列表中
用法: -e 列表中文件路径 csv文件
返回0表示存在,1表示csv文件不存在,2表示Csv格式错误,3表示文件不在Csv列表中
4. 拷贝列表文件到根目录
-i csv文件
从当前路径拷贝Csv列表中文件到根目录
如果根目录文件已存在,先Unlink
5. 校验列表
-c csv文件
校验列表中文件
对目录和链接,只校验类型,权限,pid,uid
对文件,进行全校验,如果有Sha256sum也要校验
成功返回0, 其他表示错误.
6. 删除列表中文件
-d csv文件
使用Unlink删除列表中文件
-d 和-i 可以联合操作,实现升级。如:
-d v1.csv -i v2.csv
先删掉所有V1.csv中的文件,然后从当前目录拷贝V2.csv中的文件. |
|