Difference between revisions of "Linker fisico (Prova pratica 20-02-2014)"
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()