Skip to content

Instantly share code, notes, and snippets.

@johanquiroga
Created November 1, 2017 00:46
Show Gist options
  • Save johanquiroga/91c751c285ffa51052d2e9f7142146a2 to your computer and use it in GitHub Desktop.
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)
#!/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