Created
November 1, 2017 00:46
-
-
Save johanquiroga/91c751c285ffa51052d2e9f7142146a2 to your computer and use it in GitHub Desktop.
Script solución para ejercicio planteado acerca de la organización de carpetas (Cuerpo humano)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
root=CUERPO | |
declare -A directories | |
createData() | |
{ | |
directories[cabeza]=$root | |
directories[extremidades]=$root | |
directories[tronco]=$root | |
directories[cara]=cabeza | |
directories[cerebro]=cabeza | |
directories[inferiores]=extremidades | |
directories[superiores]=extremidades | |
directories[ombligo]=tronco | |
directories[boca]=cara | |
directories[nariz]=cara | |
directories[ojos]=cara | |
directories[hemider]=cerebro | |
directories[hemizq]=cerebro | |
directories[pies]=inferiores | |
directories[brazos]=superiores | |
directories[verdes1]=ojos | |
directories[.verdes1.swp]=ojos | |
directories[verdes2]=ojos | |
directories[perone]=pies | |
directories[tibia]=pies | |
directories[tarso]=pies | |
directories[metatarso]=pies | |
directories[carpo]=brazos | |
directories[metacarpo]=brazos | |
directories[cubito]=brazos | |
directories[radio]=brazos | |
directories[falange]=brazos | |
directories[falangeta]=brazos | |
directories[falangin]=brazos | |
for key in "${!directories[@]}"; do | |
value=${directories[$key]} | |
echo "$key=$value" | |
done > directories.dat | |
} | |
isEmpty() { | |
if [ -z "$(ls -A $1)" ]; then | |
return 0 | |
else | |
return 1 | |
fi | |
} | |
listSize() { | |
echo $(wc -w <<< "$@") | |
} | |
function move() { | |
current="$(basename $1)" | |
parentdir="$(basename "$(dirname $1)")" | |
ndir=${directories[$current]} | |
if [ $ndir != $parentdir ]; | |
then | |
npath="$(find $name/$root/* -name $ndir)" | |
npath_size=$(listSize $npath) | |
# echo $npath, $npath_size | |
if [ $npath_size -gt 1 ]; | |
then | |
for i in $npath; | |
do | |
if isEmpty $i; | |
then | |
# echo "rm -r $i" | |
rm -r $i 2> /dev/null | |
fi | |
done | |
npath="$(find $name/$root/* -name $ndir)" | |
fi | |
# echo "mv $1 $npath" | |
mv $1 $npath 2> /dev/null | |
return 1 | |
# echo "$1 mal ubicado, debería estar en $npath" | |
else | |
# echo "$1 bien ubicado" | |
return 0 | |
fi | |
} | |
checkData() { | |
if [ -s ./directories.dat ]; | |
then | |
readarray -t data < directories.dat | |
for line in "${data[@]}"; do | |
key=${line%%=*} | |
value=${line#*=} | |
directories[$key]=$value | |
done | |
# echo "File exists" | |
else | |
createData | |
# echo "File doesn't exists" | |
fi | |
} | |
if [ $# -ne 2 ]; | |
then | |
echo "Faltan/Sobran argumentos. Por favor indique donde esta ubicado el arcvhio .rar objetivo" | |
echo "Forma de uso: $0 <path/to/file.rar> <Código estudiante>" | |
exit 1; | |
else | |
unrar x -u -inul $1 2> /dev/null | |
checkData | |
filename=$(basename $1) | |
name="${filename%.*}" | |
files="$(find $name/$root/* -type f)" | |
read -a files <<<$files | |
i=0 | |
while true; | |
do | |
file="${files[$i]}" | |
# echo $file | |
status=$(move $file) | |
if [ $? -eq 1 ]; | |
then | |
files="$(find $name/$root/* -type f)" | |
read -a files <<<$files | |
i=0 | |
fi | |
i=$((i+1)) | |
total=${#files[@]} | |
if [ "$i" -ge "$total" ]; | |
then | |
break | |
fi | |
done | |
dirs="$(find $name/$root/* -type d)" | |
read -a dirs <<<$dirs | |
i=0 | |
while true; | |
do | |
dir="${dirs[$i]}" | |
# echo $dir | |
status=$(move $dir) | |
if [ $? -eq 1 ]; | |
then | |
dirs="$(find $name/$root/* -type d)" | |
read -a dirs <<<$dirs | |
i=0 | |
fi | |
i=$((i+1)) | |
total=${#dirs[@]} | |
if [ "$i" -ge "$total" ]; | |
then | |
break | |
fi | |
done | |
find $name/$root/* -type f -exec chmod u=rw,g=,o= '{}' \; | |
if [ -d $HOME/$2 ]; | |
then | |
mv -f -t $HOME/$2 $name/$root 2> /dev/null | |
rmdir $name 2> /dev/null | |
else | |
mkdir $HOME/$2 | |
mv -f -t $HOME/$2 $name/$root 2> /dev/null | |
rmdir $name 2> /dev/null | |
fi | |
fi | |
echo "Script finalizado" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment