Prova pratica 2014.07.17

From Sistemi Operativi
Jump to navigation Jump to search

Esercizio 3

Il comando che dovrete implementare come script shell o programma python e' mytx.
Tale comando elenca tutti i file di una directory.
mytx ddd ddd.tx
Ogni riga del file di output (secondo parametro) deve contenere la lunghezza, uno spazio e il nume del file. Dopo l'ultima riga
deve inserire una riga bianca.
ddd.t2 deve contenere l'elenco dei file regolari. Il primo campo e' un numero intero seguito da uno spazio, tutto cio' che segue
fino alla fine riga e' il nome del file.
es.
12 file1
235 file di prova

Soluzione di Krusty

import os, sys
from stat import *

out_file = open(sys.argv[2],"w")

for f in os.listdir(sys.argv[1]):	#scorre file nella directory
	path = os.path.join(sys.argv[1],f)	
	s = os.stat(path)
	if S_ISREG(s.st_mode):
		info = str(os.path.getsize(path)) + ' ' + f  #scrive dimensione e nome file in info
		out_file.write(info + "\n")

out_file.write("\n")
out_file.close()

Soluzione di Stefano Zaniboni

#!/bin/usr/env python3

import sys
import os

def writeOnFile(fileToWrite, fileName):
    with open(fileToWrite, "a") as afile:
        course = fileName
        of = os.path.getsize(fileName)
        total = str(of)+' '+str(course)
        afile.write(str(total))
        afile.write('\n')
        afile.close()
    return None
###########################################
if __name__=="__main__":
    myDir=sys.argv[1]
    os.system("touch ddd.tx")

    for root, dirname, filenames in os.walk(myDir):
        for filename in filenames:
            writeOnFile("ddd.tx", os.path.join(root,filename))
            if os.path.isfile(os.path.join(root, filename)):
               writeOnFile("ddd2.tx", filename)