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

From Sistemi Operativi
Jump to navigation Jump to search
(Created page with "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 ...")
 
 
(4 intermediate revisions by 3 users not shown)
Line 6: Line 6:
 
presente con lo stesso nome sia in dira sia in dirb, nella directory dirb deve rim
 
presente con lo stesso nome sia in dira sia in dirb, nella directory dirb deve rim
  
 +
 +
===Soluzione di Claudio Kerov===
 
<source lang="bash">
 
<source lang="bash">
 
#!/usr/local/bin/bash
 
#!/usr/local/bin/bash
Line 33: Line 35:
  
  
 +
</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>
 
</source>

Latest revision as of 16:14, 17 May 2015

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

#!/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


Soluzione di Maldus

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()