Hacer un shell script que va a tener un parametro (path absoluto)
ejemplo : /home/pepitoObteng 2 archivos
- el primero va a encontrar todos los enlaces duros con la siguiente información:
1)cantidad=x
2) nombres
- el segundo archivo va encontrar los enlaces sismbolicos con la siguiente información:
1)cantidad=y
2) nombre_fuente nombre_enlace (el nombre fuente se refiere al nombre original del enlace)
Nota: Trabaja con i-nodo
Respuesta:
#!/bin/bash
infoDuros="fuertes.txt";
infoSimbolicos="simbolicos.txt";
#verifica que los archivos fuertes.txt y simbolicos.txt existan
crearArchivos(){
if [ ! -f $infoDuros ];
then
echo "Creando archivo $infoDuros de configuracion";
echo "" > $infoDuros;
fi
if [ ! -f $infoSimbolicos ] ;
then
echo "Creando archivo $infoSimbolicos de configuracion";
echo "" > $infoSimbolicos;
fi
}
found="";
buscarFuertes(){
cod=$1;
cont=0;
for index in `find $ruta -inum $cod`
do
cont=`expr $cont + 1`;
done
if [ $cont -lt 2 ];
then
datos="";
fi
return $cont;
}
enlacesFuertes(){
echo "">$infoDuros;
echo "Inodo y ruta de enlace Fuerte:">>$infoDuros;
echo "">>$infoDuros;
ruta=$1;
numFuertes=0;
printf "Procesando enlaces duros: ";
oldIFS=$IFS # conserva el separador de campo
IFS=$'\n'
for k in `ls $ruta`
do
rutaArchivo="$ruta/$k";
if [ -f "$rutaArchivo" ];
then
inodo=`ls -il $rutaArchivo|cut -f 1 -d ' '`;
buscarFuertes $inodo;
tam=$?;
if [ $tam -gt 1 ]; then
echo $inodo" "$rutaArchivo >>$infoDuros ;
numFuertes=`expr $numFuertes + 1`;
printf ">";
fi
fi
done
IFS=$old_IFS # restablece el separador de campo predeterminado
printf " $numFuertes";
echo "">>$infoDuros;
echo "Numero de enlaces duros: $numFuertes">>$infoDuros;
echo;
}
enlacesSimbolicos(){
echo "">$infoSimbolicos;
echo "Fuente - Enlace Simbolico:">>$infoSimbolicos;
echo "">>$infoSimbolicos;
printf "Procesando enlaces simbolicos: ";
pathAbs=$1;
numSimbolicos=0;
oldIFS=$IFS # conserva el separador de campo
IFS=$'\n'
for arc in `ls $pathAbs`
do
if [ -h "$pathAbs/$arc" ];
then
padre=`ls -l "$pathAbs/$arc"| awk 'BEGIN {FS="-> "}; {print $2}'`;
echo "$padre - $arc">>$infoSimbolicos;
numSimbolicos=`expr $numSimbolicos + 1`;
printf ">";
fi
done
printf " $numSimbolicos";
echo "">>$infoSimbolicos;
echo "Numero de enlaces simbolicos: $numSimbolicos">>$infoSimbolicos;
echo;
IFS=$old_IFS # restablece el separador de campo predeterminado
}
InitEnlaces(){
#muestra el dialogo de seleccion de directorio a procesar
ruta=`zenity --file-selection --directory --filename="$HOME/Escritorio" --title="Seleccione el direcotorio para buscar los enlaces"`
if [ -n "$ruta" ];
then
if [ -d "$ruta" ];
then
enlacesFuertes $ruta
enlacesSimbolicos $ruta
zenity --question \
--text="La busqueda de enlaces terminada, Desea ver los resultados en los archivos $infoSimbolicos y $infoDuros.?";
if [ $? -eq 0 ];then
gedit $infoSimbolicos $infoDuros
fi
else
zenity --warning \
--text="El path debe ser un directorio no un archivo.";
fi
else
zenity --warning \
--text="No digito un path valido por favor intentelo nuevamente.";
fi
}
crearArchivos
InitEnlaces
exit 0;