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 ...")
 
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

Revision as of 08:28, 20 April 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