Aggiorna cartelle (Prova pratica 23-01-2014)

From Sistemi Operativi
Jump to navigation Jump to search

Il comando che dovrete implementare come script shell o programma python e' updatedir. Updatedir prende due directory come parametri.

updatedir dira dirb

Deve copiare in dirb tutti i file regolari che sono in dira e non in dirb. Se un file regolare e' presente con lo stesso nome sia in dira sia in dirb, il file deve essere copiato dalla dira alla dirb solo se i contenuti differiscono.


Soluzione di Claudio Kerov e Stefano Zaniboni

#!/usr/local/bin/python3


import os
import sys
import filecmp
import shutil

if not os.path.isdir(sys.argv[1]):
	sys.exit(sys.argv[1]+" non è una directory!")
if not os.path.isdir(sys.argv[2]):
	sys.exit(sys.argv[2]+" non è una directory!")

dir1= sys.argv[1]
dir2= sys.argv[2]
lista=[]

for path, dirnames, filenames in os.walk(dir2):
	for filename in filenames:
		if(os.path.isfile(dir2+filename)):
			lista.append(filename)

for path, dirnames, filenames in os.walk(dir1):
	for filename in filenames:
		if(os.path.isfile(dir1+filename)):
			if filename in lista:
				if not filecmp.cmp(dir1+filename, dir2+filename):
					shutil.copyfile(dir1+filename, dir2+filename)
					print("Ho copiato",filename+"! (diff)")
			else:
				shutil.copy(dir1+filename, dir2)
				print("Ho copiato", filename+"!")