在打patch时经常需要提取出修改的文件或指定的文件,手动操作又太麻烦,于是通过python脚本实现按条件拷贝的功能,支持自动建立目录,支持多条件查询。
代码如下:
查询内核中包含特定宏或字符串的文件,将其自动生成到新目录,用于生成patch文件,因为不是所有的文件都需要拷贝。
#!/usr/bin/python
import os
#默认拷贝的目录
work_dir="./test"
#条件列表
cmd_array=[
"grep \"NOS_CONTROL\" ./linux-4.9.77 -R|awk -F : '{print $1}'",
"find linux-4.9.77/ -name \"bm_*\"",
"find linux-4.9.77/ -name \"nos_*\"",
"grep \"BEHAVIOR_MANAGER\" ./linux-4.9.77 -R|awk -F : '{print $1}'"
]
def copy_file(cmd):
fd = os.popen(cmd)
res = fd.read()
res.split("\n")
files = res.split("\n")
for file_path in files:
if len(file_path) < 2:
continue;
units = file_path.split("/")
size = len(units);
file_name = units[size-1]
index = file_path.index(file_name);
file_dir = file_path[0:index]
os.system("mkdir %s/%s -p"%(work_dir,file_dir));
os.system("cp %s %s/%s"%(file_path,work_dir,file_dir));
print "copying file %s to %s/%s ....................ok"%(file_path,work_dir,file_dir);
fd.close();
if __name__ == "__main__":
print 'begin copy file......'
for cmd in cmd_array:
print "exec :%s"%(cmd)
copy_file(cmd);
输出结果
begin copy file......
exec :grep "NOS_CONTROL" ./linux-4.9.77 -R|awk -F : '{print $1}'
copying file ./linux-4.9.77/.config to ./test/./linux-4.9.77/ ....................ok
copying file ./linux-4.9.77/include/generated/autoconf.h to ./test/./linux-4.9.77/include/generated/ ....................ok
copying file ./linux-4.9.77/include/linux/skbuff.h to ./test/./linux-4.9.77/include/linux/ ....................ok
copying file ./linux-4.9.77/include/linux/skbuff.h to ./test/./linux-4.9.77/include/linux/ ....................ok
copying file ./linux-4.9.77/include/config/auto.conf to ./test/./linux-4.9.77/include/config/ ....................ok
copying file ./linux-4.9.77/include/config/tristate.conf to ./test/./linux-4.9.77/include/config/ ....................ok
copying file ./linux-4.9.77/include/net/netfilter/nf_conntrack.h to ./test/./linux-4.9.77/include/net/netfilter/ ....................ok
copying file ./linux-4.9.77/include/net/netfilter/nf_conntrack.h to ./test/./linux-4.9.77/include/net/netfilter/ ....................ok
copying file ./linux-4.9.77/include/net/netfilter/bm_online_ip.h to ./test/./linux-4.9.77/include/net/netfilter/ ....................ok
copying file ./linux-4.9.77/include/net/netfilter/bm_online_ip.h to ./test/./linux-4.9.77/include/net/netfilter/ ............