业务需求:需要把一个目录下的1000多万个文件迁移到远程机器思路:用wget来把文件一个一个的迁移过去,因为文件数量比较大,如果一下在循环操作,会非常慢。所以分批操作,采用化整为零的方法。
#!/bin/sh home=/usr/local/www/skate/image63delback cd$home if[`pwd`==$home];then a="1100000020000003000000400000050000006000000700000080000009000000" forbin$a do c=`expr$b+100000` forloopin`sed-n"$b,$c"p$1` do path=`echo$loop|awk-F"/"'{print$1"/"$2"/"$3"/"$4}'` mkdir-p$path /usr/bin/wgethttp://172.16.111.163/$loop-P$path echo$loop>>$1.log done done fi
需求2:需要把A目录下的1000多万个小文件分批迁移到B目录,每次1000个,30分钟一次,mv之前需确认B目录为空。
思路:使用python的shutil模块,也用shell,大概思路与上文一般。
#-*-coding:utf-8-*- importos importshutil defTest1(rootDir): list_dirs=os.walk(rootDir) count=0 forroot,dirs,filesinlist_dirs: fordindirs: printos.path.join(root,d) ifos.listdir("/data/file/S10032666/"): print"目录非空,请清空文件。" return0 else: forfinfiles: ifcount<1000: count=count+1 f=os.path.join(root,f) shutil.move(f,"/data/file/S10032666/") printos.path.join(root,f) else: return0 Test1("/data/S10032666_bak/")