Difference between revisions of "Linker fisico (Prova pratica 20-02-2014)"

From Sistemi Operativi
Jump to navigation Jump to search
(Blanked the page)
Line 1: Line 1:
−
Il comando che dovrete implementare come script shell o programma python e' linkdir. linkdir prende due directory come parametri.
 
  
−
linkdir dira dirb
 
−
 
−
e deve creare in dirb un link fisico (non simbolico) a 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, nella directory dirb deve rim
 
−
 
−
 
−
===Soluzione di Claudio Kerov===
 
−
<source lang="bash">
 
−
#!/usr/local/bin/bash
 
−
 
−
if [[ -d $1 ]]; then
 
−
if [[ -d $2 ]]; then
 
−
dir1=$1
 
−
dir2=$2
 
−
fi
 
−
fi
 
−
 
−
ris1=`find $dir1 -type f | sort | cut -d "/" -f 2-`
 
−
ris2=`find $dir2 -type f | sort | cut -d "/" -f 2-`
 
−
 
−
indir1=`comm -2 -3 <(echo "$ris1") <(echo "$ris2")`
 
−
common=`comm -1 -2 <(echo "$ris1") <(echo "$ris2")`
 
−
 
−
for nome in $indir1; do
 
−
`ln ${dir1}/${nome} $dir2`
 
−
done
 
−
 
−
for file in $common; do
 
−
if [[ "${dir1}${file}" -ot "${dir2}${file}" ]]; then
 
−
`ln ${dir1}/${file} $dir2`
 
−
fi
 
−
done
 
−
 
−
 
−
</source>
 
−
 
−
 
−
===Soluzione di Maldus===
 
−
<source lang="python">
 
−
import os
 
−
import argparse
 
−
 
−
def main():
 
−
    parser = argparse.ArgumentParser(description='linkdir')
 
−
    parser.add_argument('dira', help='directory aggiornata')
 
−
    parser.add_argument('dirb', help='directory da aggiornare')
 
−
    args = parser.parse_args()
 
−
 
−
    entrya = os.listdir(args.dira)
 
−
    entryb = os.listdir(args.dirb)
 
−
    for f in entrya:
 
−
        if os.path.isfile(args.dira+'/'+f) and not f in entryb:
 
−
            os.link( args.dira+'/'+f , args.dirb+'/'+f )
 
−
        else:
 
−
            timea = os.path.getmtime(args.dira+'/'+f)
 
−
            timeb = os.path.getmtime(args.dirb+'/'+f)
 
−
            if timea > timeb:
 
−
                os.link( args.dira+'/'+f , args.dirb+'/'+f )
 
−
 
−
 
−
if __name__ == '__main__':
 
−
    main()
 
−
</source>
 

Revision as of 17:14, 17 May 2015