integrity checking
This commit is contained in:
@@ -22,6 +22,8 @@ def setup_options():
|
|||||||
help="Do not add new files [%(default)s]")
|
help="Do not add new files [%(default)s]")
|
||||||
parser.add_argument("-c",action="store_true",dest="changed",default=False,
|
parser.add_argument("-c",action="store_true",dest="changed",default=False,
|
||||||
help="Modify changed files [%(default)s]")
|
help="Modify changed files [%(default)s]")
|
||||||
|
parser.add_argument("--check",action="store_true",dest="check",default=False,
|
||||||
|
help="Check md5sums of files. Note that --full affects the comparison. Limit check with -s.")
|
||||||
parser.add_argument("-d",action="store_true",dest="delete",default=False,
|
parser.add_argument("-d",action="store_true",dest="delete",default=False,
|
||||||
help="Delete non-existing entries [%(default)s]")
|
help="Delete non-existing entries [%(default)s]")
|
||||||
parser.add_argument("--du",type=str,action='store',dest="diskused",default=False,
|
parser.add_argument("--du",type=str,action='store',dest="diskused",default=False,
|
||||||
@@ -168,6 +170,8 @@ def add_recurse(options):
|
|||||||
filename=os.path.realpath(os.path.join(path,file))
|
filename=os.path.realpath(os.path.join(path,file))
|
||||||
if file==options.sqlfile:
|
if file==options.sqlfile:
|
||||||
continue
|
continue
|
||||||
|
if not os.path.isfile(filename):
|
||||||
|
continue
|
||||||
#if not is_listed(db,filename):
|
#if not is_listed(db,filename):
|
||||||
if file not in db_files:
|
if file not in db_files:
|
||||||
if options.add:
|
if options.add:
|
||||||
@@ -304,6 +308,25 @@ def searchdb(sqlfile,needle):
|
|||||||
for row in db:
|
for row in db:
|
||||||
print(row[0])
|
print(row[0])
|
||||||
|
|
||||||
|
def checkdb(sqlfile,fullFile,needle):
|
||||||
|
if len(needle)==0:
|
||||||
|
needle.append('%')
|
||||||
|
needle=['%'+i+'%' for i in needle]
|
||||||
|
like_query=' OR '.join(['file LIKE ?' for i in needle])
|
||||||
|
conn=sqlite3.connect(sqlfile)
|
||||||
|
conn.text_factory=str
|
||||||
|
db=conn.cursor()
|
||||||
|
db.execute("SELECT file,hash FROM list WHERE "+like_query+" ORDER BY file",needle)
|
||||||
|
for row in db:
|
||||||
|
status='OK'
|
||||||
|
if os.path.exists(row[0]):
|
||||||
|
md5f=get_md5(row[0],fullFile)
|
||||||
|
if row[1]!=md5f:
|
||||||
|
status='Checksum-difference'
|
||||||
|
else:
|
||||||
|
status='Not-found'
|
||||||
|
print("%s %s"%(row[0],status))
|
||||||
|
|
||||||
def matchdb(sqlfile,needle,helper):
|
def matchdb(sqlfile,needle,helper):
|
||||||
needle=needle.lower()
|
needle=needle.lower()
|
||||||
import difflib as dl
|
import difflib as dl
|
||||||
@@ -343,6 +366,9 @@ def main():
|
|||||||
if options.haschanges or options.hasadditions or options.hasdeletions:
|
if options.haschanges or options.hasadditions or options.hasdeletions:
|
||||||
has_changes(options)
|
has_changes(options)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
if options.check:
|
||||||
|
checkdb(options.sqlfile,options.fullfile,options.search)
|
||||||
|
sys.exit(0)
|
||||||
if len(options.search)>0 and not options.match:
|
if len(options.search)>0 and not options.match:
|
||||||
searchdb(options.sqlfile,options.search)
|
searchdb(options.sqlfile,options.search)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|||||||
Reference in New Issue
Block a user