User:Vkolesni
From ICO wiki
Bash quest
Luua skript, mis otsiks etteantud kataloogist ühesuguseid faile. Failide võrdlemine võiks toimuda md5sum tasandil. Loodav skript peaks olema suuteline leidma kõikide ühesuguste failide asukoha ja kuvama ka nende nimed.
Näideks failidel võivad olla erinevad nimed, kuid sama sisu :
fca209683890bb2a02c60535ca82f920 joujou
fca209683890bb2a02c60535ca82f920 tere
fca209683890bb2a02c60535ca82f920 hello
fca209683890bb2a02c60535ca82f920 asd
Quest8 lahendus
#!/bin/bash
#Autor: Vladimir Kolesnik, vkolesni@itcollege.ee
#Versioon 0.5
#Antud skript otsib etteantud kataloogist ühesuguseid faile. Failide võrdlemine toimub md5sum tasandil.
#Skript leiab ja kuvab kõikide ühusuguste failide asukoha ja nimed.
#Skripti kasutamiseks liiguge kataloogise, kus on vaja otsida ühesuguseid faile ja käivitage skripti sudo õigusega
#kontrollib, kas on piisavalt õigusi skripti käivitamiseks
if [ $UID -ne 0 ]; then
echo "Käivita skripti $(basename $0) juurkasutaja õigustes: sudo"
exit 1
fi
#Otsimine ainult faile (-type f), mida ei ole tühjad(-not -empty), ning määratleme print formati ("%s\n")
find -not -empty -type f -printf "%s\n" |
#Sorteerime descending (reverse) numeric järgi
sort -rn |
#Ainult printimine dublicated unikaalsed faile
uniq -d |
#Kasutame käsu "xargs" selleks, et asendama ("I") {} argumenti listiga
xargs -I{} -n1 find -type f -size {}c -print0 |
#Võtame ainult md5summi, mis ei sisalda komasi ega tühikuid ("-0")
xargs -0 md5sum |
#Sorteerimine
sort |
#Võtame ainult 32 numbri ("-w32") võrdlemiseks
uniq -w32 --all-repeated=separate