He añadido unas modificaciones al script que nos permite organizar las descargas del Escritorio de manera automatica, copiando los archivos que indiquemos a los directorios que indiquemos. Lo ideal seria crear una interface GUI con Python pero lo dejare para mejor ocasión. Aqui el script (organiza.sh):
#!/bin/bash
#--------------------------------------------------------------------
# organiza.sh
#--------------------------------------------------------------------
# Pequeño script para organizar las descargas.
#
# Examina los archivos por su extension y los mueve a las carpetas
# destino que se le indiquen.
#--------------------------------------------------------------------
# Lenguaje (reservado para uso futuro, para poner los textos de acuerdo al lenguaje)
LENGUAJE=$LANG
# Cada 2 minutos (reservado para uso futuro y cron)
TIEMPO_MINUTOS=2
# Renombrar o sobreescribir si existe el fichero destino
RENOMBRAR_SI_EXISTE="si"
# Carpeta Fecha
FECHA=`date +"%d%b"`
# Colores
Black="0;30"
DarkGray="1;30"
Blue="0;34"
LightBlue="1;34"
Green="0;32"
LightGreen="1;32"
Cyan="0;36"
LightCyan="1;36"
Red="0;31"
LightRed="1;31"
Purple="0;35"
LightPurple="1;35"
Brown="0;33"
Yellow="1;33"
LightGray="0;37"
White="1;37"
#-------------------------------------
# color()
# Imprime un texto de color
# @param texto del mensaje
# @param color del texto
#-------------------------------------
color()
{
mensaje="${1}"
color="${2}"
echo -e "\e[${color}m${mensaje}\e[00m"
}
bold()
{
echo -e "\033[1m${1}\033[0m"
}
#---------------------------------
#---------------------------------
# mover()
# Mueve los archivos de origen a destino segun la extension
# @param directorio origen de busqueda
# @param directorio destino donde mover
# @param extension del archivo a mover
#---------------------------------
mover()
{
origen="$1"
destino="$2"
archivos="$3"
bold "=========================================================================================================================="
bold " Moviendo archivos [$archivos] desde [$origen] hasta [$destino] "
bold "=========================================================================================================================="
# Comprobamos si existe el directorio destino, si no existe, lo creamos
if [ ! -d "$destino" ];
then
echo "El directorio destino [$destino] no existe. Creandolo..."
mkdir "$destino"
echo "directorio creado."
fi;
# Recorrer cada uno de los archivos origen
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for archivo in `ls $origen/$archivos`
do
echo "Encontrado $archivo..."
# Comprobamos si el archivo ya existe en el destino, si ya existe se mueve pero con otro nombre para no borrar el original
# para ello le concateno _timestamp
TIMESTAMP=`date +%s`
# Me quedo con solo el nombre del archivo
nombre=`basename "$archivo"`
# chequeo si existe en destino
if [ -f "$destino/$nombre" ];
then
color "El archivo ya existe, se renombra con el timestamp..." $DarkGray
nombre2="${TIMESTAMP}_${nombre}"
#echo $nombre
color "* Moviendo archivo [$nombre] a [$destino/$nombre2]..." $DarkGray
mv "$origen/$nombre" "$destino/$nombre2"
else
color "Moviendo archivo [$nombre] a [$destino/$nombre]..." $DarkGray
mv "$origen/$nombre" "$destino/$nombre"
fi;
done
IFS=$SAVEIFS
}
#================================================================================
# REGLAS PARA MOVER LOS ARCHIVOS, cambia esto como corresponda segun tu caso.
#================================================================================
# Sintaxis: mover "directorio_origen" "directorio_destino" "extension archivos"
#================================================================================
#=====Imagenes=========
mover "$HOME/Escritorio" "$HOME/Imágenes/$FECHA" "*.gif"
mover "$HOME/Escritorio" "$HOME/Imágenes/$FECHA" "*.jpg"
mover "$HOME/Escritorio" "$HOME/Imágenes/$FECHA" "*.jpeg"
mover "$HOME/Escritorio" "$HOME/Imágenes/$FECHA" "*.png"
#====Descargas=========
mover "$HOME/Escritorio" "$HOME/Descargas/$FECHA" "*.deb"
mover "$HOME/Escritorio" "$HOME/Descargas/$FECHA" "*.zip"
mover "$HOME/Escritorio" "$HOME/Descargas/$FECHA" "*.tar.gz"
mover "$HOME/Escritorio" "$HOME/Descargas/$FECHA" "*.7z"
mover "$HOME/Escritorio" "$HOME/Descargas/$FECHA" "*.rar"
mover "$HOME/Escritorio" "$HOME/Descargas/$FECHA" "*.gz"
#====Documentos=========
mover "$HOME/Escritorio" "$HOME/Documentos/$FECHA" "*.html"
mover "$HOME/Escritorio" "$HOME/Documentos/$FECHA" "*.js"
mover "$HOME/Escritorio" "$HOME/Documentos/$FECHA" "*.pdf"
#
# Si se quiere añadir al crontab para ejecutar cada 2 minutos
#
# crontab -e
# */2 * * * * /usr/bin/organiza.sh
#
# otra opcion es dejarlo en $HOME/.gnome2/nautilus-scripts como "Organizar Escritorio"
#
# Pendiente escribir un interface Python para crear las reglas y ejecutar desde el Panel.
#
exit;
Instalacion:
Varias formas:
* Crear un lanzador del escritorio que apunte al script y añadirlo al panel.
* Dejarlo como antes ejecutandose cada “x” tiempo mediante cron.
* O la que me gusta a mi ahora, copiarlo a $HOME/.gnome2/nautilus-scripts con el nombre “Organizar Escritorio”, asi que cuando quieras mover los archivos basta con seleccionarlo desde Scripts > Organizar Escritorio.
Configuración:
Yo dejo todas las descargas en el Escritorio, que puede no ser vuestro caso, asi que debeis editar el archivo y cambiar la parte última del mismo, justo donde dice:
#=================================================
# REGLAS PARA MOVER LOS ARCHIVOS, cambia esto como corresponda segun tu caso.
#======================================================
# Sintaxis: mover "directorio_origen" "directorio_destino" "extension archivos"
#======================================================
#=====Imagenes=========
mover "$HOME/Escritorio" "$HOME/Imágenes/$FECHA" "*.gif"
Aqui p.ej la regla lo que haria es mover los archivos *.gif desde el Escritorio hasta la carpeta $HOME/Imágenes/18Sep
$FECHA es una variable que va almacenando la fecha actual, asi me permite ir clasificando los ficheros de manera temporal.
Pero podrias poner tus propias reglas, p.ej:
mover "/tmp" "$HOME/Descargas/PDF" "*.pdf"
que moveria todos los archivos /tmp/*.pdf hasta la carpeta “PDF” de Descargas.





Muchas gracias por el script.
muy prectico ese script
Oye gracias por el script, pero me da problemas, no lee los archivos del directorio de origen.
Esto es lo que me dice al ejecutarlo:
ls: no se puede acceder a /home/dunnem/Descargas/*.pdf: No existe el archivo o directorio
El codigo es el siguiente, le quite algunas cosas y comente otras, podrias ayudarme porfavor? :
#!/bin/bash
#——————————————————————–
# organiza.sh
#——————————————————————–
# Pequeño script para organizar las descargas.
#
# Examina los archivos por su extension y los mueve a las carpetas
# destino que se le indiquen.
#——————————————————————–
# Lenguaje (reservado para uso futuro, para poner los textos de acuerdo al lenguaje)
LENGUAJE=$LANG
# Cada 2 minutos (reservado para uso futuro y cron)
TIEMPO_MINUTOS=2
# Renombrar o sobreescribir si existe el fichero destino
#RENOMBRAR_SI_EXISTE=”si”
# Carpeta Fecha
FECHA=`date +”%d%b”`
#————————————-
# color()
# Imprime un texto de color
# @param texto del mensaje
# @param color del texto
#————————————-
#color()
#{
#mensaje=”${1}”
#color=”${2}”
#echo “${mensaje}”
#}
#bold()
#{
#echo “${1}”
#}
#———————————
#———————————
# mover()
# Mueve los archivos de origen a destino segun la extension
# @param directorio origen de busqueda
# @param directorio destino donde mover
# @param extension del archivo a mover
#———————————
mover()
{
origen=”$HOME/Descargas”
destino=”$1″
archivos=”$2″
#echo “”
#echo “”
#echo “=========================================================================================”
#echo ” Moviendo archivos [$archivos] a [$destino] ”
#echo “=========================================================================================”
# Comprobamos si existe el directorio destino, si no existe, lo creamos
if [ ! -d "$destino" ];
then
echo “El directorio destino [$destino] no existe.”
echo “”
echo “Creandolo……… Directorio Creado.”
mkdir “$destino”
echo “”
fi;
# Recorrer cada uno de los archivos origen
SAVEIFS=$IFS
IFS=$(echo -en “\n\b”)
for archivo in `ls “$origen/$archivos”`
do
echo “\n Encontrado $archivo…”
# Comprobamos si el archivo ya existe en el destino, si existe se mueve con otro nombre
# para ello le concateno _timestamp
TIMESTAMP=`date +%s`
# Me quedo con solo el nombre del archivo
nombre=`basename “$archivo”`
# chequeo si existe en destino
if [ -f "$destino/$nombre" ];
then
echo “\n El archivo ya existe, se renombra con el timestamp…”
nombre2=”${TIMESTAMP}_${nombre}”
echo ” * Moviendo archivo [$nombre] a [$destino]…”
mv “$origen/$nombre” “$destino/$nombre2″
else
echo ” Moviendo archivo [$nombre] a [$destino]…”
mv “$origen/$nombre” “$destino/$nombre”
fi;
done
IFS=$SAVEIFS
}
#================================================================================
# REGLAS PARA MOVER LOS ARCHIVOS, cambia esto como corresponda segun tu caso.
#================================================================================
# Sintaxis: mover “directorio_origen” “directorio_destino” “extension archivos”
#================================================================================
#=====Imagenes=========
#mover “$HOME/Imágenes/” “*.gif”
#mover “$HOME/Imágenes/” “*.jpg”
#mover “$HOME/Imágenes/” “*.jpeg”
#mover “$HOME/Imágenes/” “*.png”
mover “$HOME/S_O” “*.iso”
#====Documentos=========
#mover “$HOME/Documentos/$FECHA” “*.html”
#mover “$HOME/Documentos/$FECHA” “*.js”
mover “$HOME/Documentos” “*.pdf”
mover “$HOME/Música/Zueltos” “*.mp3″
#
# Si se quiere añadir al crontab para ejecutar cada 2 minutos
#
# crontab -e
# */2 * * * * /usr/bin/organiza.sh
#
# otra opcion es dejarlo en $HOME/.gnome2/nautilus-scripts como “Organizar Escritorio”
#
# Pendiente escribir un interface Python para crear las reglas y ejecutar desde el Panel.
#
exit;
No problem
ls: no se puede acceder a /home/dunnem/Descargas/*.pdf: No existe el archivo o directorio
es que no encuentra ningun archivo .pdf para mover en tu directorio origen /home/dunnem/Descargas
pero deberia continuar chequeando el resto de extensiones.
ese mensaje te lo va a mostrar siempre que intente mover una extension, p.ej .pdf en este caso, pero no encuentre ningun archivo de ese tipo en el directorio origen.
El detalle es que si tengo PDF’s en “$origen” los puse ahí para probar el script.
Aclaro que si le di permisos de ejecucion.
Y el error es el mismo para los 3 tipos de archivos descomentados, es el sig:
” ls: no se puede acceder a /home/dunnem/Descargas/*.iso: No existe el archivo o directorio
ls: no se puede acceder a /home/dunnem/Descargas/*.pdf: No existe el archivo o directorio
ls: no se puede acceder a /home/dunnem/Descargas/*.mp3: No existe el archivo o directorio ”
El directorio de origen lo manejé como en tu script original y de todas las formas que se me ocurrieron, pero siempre me devolvia el error anterior.
entonces sólo se me ocurre que no existe ese directorio o esta pero bailando alguna letra, por la sensibilidad a mayusculas y minusculas.
como en el script tienes:
origen=”$HOME/Descargas”
entiendo que tu user es: /home/dunnem
y que dentro deberia existir una carpeta llamada “Descargas”
prueba a hacer desde consola:
$ ls -l /home/dunnem/Descargas/*.pdf , si te devuelve el mismo error revisa la ruta, que sea correcta, pq si existe la carpeta, tienes pdfs dentro y eres el propietario, deberia sacarte un listado de archivos.
pero vamos ese error, te lo va a sacar siempre si la carpeta existe pero no encuentra archivos del tipo especificado.
██ jose @ ~
██ 18:14:09 $ ls $HOME/Escritorio/*.jpg
ls: no se puede acceder a /home/jose/Escritorio/*.jpg: No existe el fichero ó directorio
██ jose @ ~
██ 18:14:20 $ ls $HOME/Escritorio/*.png
/home/jose/Escritorio/mini.png
Hola otra vez Jose, disculpa mi insistencia pero el problema persiste.
Hice lo siguiente en la terminal:
dunnem@nn:~$ ls /home/dunnem/Descargas/*.pdf
/home/dunnem/Descargas/CAP2A03BTHP0137.pdf
/home/dunnem/Descargas/Como-crear-Temas-para-Metacity-Espa__ol-Lionel-Bino.pdf
dunnem@nn:~$ ls /home/dunnem/Descargas/*.mp3
/home/dunnem/Descargas/00. Be By Myself.mp3
/home/dunnem/Descargas/00. Big Pimpin.mp3
/home/dunnem/Descargas/00. Flo-Rida Feat. David Guetta – Club Can’t Handle Me.mp3
Y ya intente dejando todo tipo de archivos en Descargas y descomentandolos del script pero el error es el mismo para todos.
Estoy en verdad confundido con esto, porque ya intente copiar la ruta desde nautilus por si la eescribia mal; tambien intente con cd /…/ hasta llegar al directorio y nada me funciona.
muy raro, bueno la parte mas importante del script es:
for archivo in `ls $origen/$archivos`
do
# Aqui cosas a hacer por cada archivo
echo “archivo es $archivo”
done
esto un bucle que ejecuta un ls y por cada archivo que devuelve lo imprime
prueba a hacer un script a parte con esto:
for archivo in `ls /home/dunnem/Descargas/*.pdf`
do
echo “archivo es $archivo”
done
como tienes:
dunnem@nn:~$ ls /home/dunnem/Descargas/*.pdf
/home/dunnem/Descargas/CAP2A03BTHP0137.pdf
/home/dunnem/Descargas/Como-crear-Temas-para-Metacity-Espa__ol-Lionel-Bino.pdf
deberia sacarte
archivo es /home/dunnem/Descargas/CAP2A03BTHP0137.pdf
archivo es /home/dunnem/Descargas/Como-crear-Temas-para-Metacity-Espa__ol-Lionel-Bino.pdf
si eso falla ya me doy por vencido, o no hay nada, o la ruta no la encuentra o el bash esta corrompido.