El orden, ah! mantener de manera ordenada el escritorio, soy un completo desastre en este aspecto. Descargo muchos ficheros, se van acumulando y luego pierdo mucho tiempo organizandolos en carpetas. Hace tiempo se me ocurrio organizar algo más el escritorio creando un wallpaper dinamico. Pero ahora se me ha ocurrido algo mejor, usando un script muy sencillo en bash y una tarea programada mediante cron. Veamos un ejemplo en el caso de los ficheros PDF y es que últimamente voy generando muchos. Todas mis descargas desde el navegador las hago por defecto sobre el escritorio, por que no programar por ejemplo un script que me mueva mis ficheros .pdf localizados en el Escritorio a mi carpeta “Documentos”. Y eso mismo es lo que vamos a hacer con un script en cron que se ejecute cada minuto y que de manera automatica mueva todos los ficheros .pdf del Escritorio a la carpeta “Documentos”. Así me dara igual ir descargando 10,20, 30 o mil ficheros pdf que de manera automática se iran almacenando en la carpeta correspondiente. Aqui dejo el contenido del script, editalo como veas necesario:
#!/bin/bash #------------------------------------------------------------------------------------------- # Script para ejecutar por CRON cada 1 min, para mover los archivos PDF del escritorio a mi # carpeta de documentos #------------------------------------------------------------------------------------------- # Siendo como soy un desastre, en busca del orden... # Nota: podria hacerse lo mismo para imagenes, flv, mp3, avi, iso etc... ORIGEN="$HOME/Escritorio" DESTINO="$HOME/Documentos" # Mueve todos los ficheros PDF al Destino mv $ORIGEN/*.pdf $DESTINO # # Guardo el script en /usr/bin/Mueve.sh # Le doy permisos de ejecucion: # chmod +x Mueve.sh # # y programo esta entrada del cron: # # crontab -e # */1 * * * * /usr/bin/Mueve.sh # # Para que cada minuto ejecute el script y me mueva los ficheros .pdf descargados desde # el Escritorio #
El script es muy sencillo, solamente hace un mover (mv $HOME/*.pdf a $HOME/Documentos), alguien podria currarse un script más completo que almacenara en carpetas por fecha por ejemplo, A mi en principio me vale guardando todo en “Documentos” del directorio HOME.
Guarda este script como Mueve.sh (o el nombre que quieras) y dale permisos de ejecucion:
$ sudo chmod +x Mueve.sh
Entonces lo mueves a la carpeta /usr/bin para que este accesible a traves del path:
$ sudo mv Mueve.sh /usr/bin
Crea entonces una programación mediante cron, para ello ejecuta:
$ crontab -e
y escribe una linea tal como:
*/1 * * * * /usr/bin/Mueve.sh
Esta linea lo que hace es ejecutar cada minuto el script “Mueve.sh” o en definitiva mover todos los ficheros que actualmente existan en el Escritorio a la carpeta “Documentos”.
El ejemplo es sólo para ficheros con extensión PDF pero se podria ampliar fácilmente para que te moviera otro tipo de archivos. P.ej:
- imagenes (.jpg, .gif, etc…) a $HOME/Imagenes
- musica (.mp3) a $HOME/Música
- videos (.avi, .flv) a $HOME/Videos
ya depende del uso que quiera darle cada uno. Ventajas de Linux…





Excelente, una idea original y sencilla que me venía haciendo falta para mi carpeta de descargas, que siempre anda como mi cuarto
Feliz dia del programador..!
Ciertamente nosotros somos un desastre descargando todo en el escritorio xD , mejor le agrego unas cuantas lineas a dicho script para mover a las carpetas que me trajo el Ubuntu ^^
aunque yo dentro de Documentos , tengo capetas con nombres como “doc” , “pdf” , “xls” , “odt” , etc ….
Si ya le he hecho una pequeña modificacion para que me vaya creando carpetas con la fecha, p.ej Videos/13sep, Videos/14sep, etc…
Seria algo parecido a:
ORIGEN=”$HOME/Escritorio”
DESTINO_DOCUMENTOS=”$HOME/Documentos”
DESTINO_VIDEOS=”$HOME/Videos”
FECHA=`date +”%d%b”`
if [ -d $DESTINO_VIDEOS/$FECHA ];
then
echo “Existe directorio, no es necesario crearlo.”
else
mkdir “$DESTINO_VIDEOS/$FECHA”
fi
# Mueve todos los ficheros PDF al Destino
mv $ORIGEN/*.pdf $DESTINO_DOCUMENTOS
# Mueve todos los ficheros FLV a Videos/fecha_la_que_sea
mv $ORIGEN/*.flv $DESTINO_VIDEOS/$FECHA
Pues en vez de fecha, se puede hacer igual por extension:
mv *.doc $HOME/Documentos/doc
mv *.xls $HOME/Documentos/xls
Eso ya como cada uno quiera. Incluso estaba pensando en hacerlo via Python, especie de configurador, pero no tengo mucho tiempo ahora.
Muy interesante la idea, gracias
Falta agregarle al final que actualice el escritorio automáticamente. Para eso es necesario tener instalado xsendkeycode.
sudo apt-get install lineakd
Entonces agregar al final:
xsendkeycode 71 1
xsendkeycode 71 0
Muy interesante.
Sólo me surge una duda: si estamos descargando una imagen ISO o un vídeo de gran tamaño, el script que se dispara una vez por minuto podría mover el archivo a la carpeta correspondiente cuando éste aún no se ha descargado por completo…
Si metemos el mv en una condición if que compare la hora de los archivos con la hora actual del sistema (con una tolerancia de 10 o 15 minutos) podriamos minimizar ese inconveniente…
No soy un experto en shell-script, pero me voy a poner a probarlo un rato.
Saludos.
Bueno depende con que lo descargues, algunos gestores mientras la descarga no está completa la guardan con extensión .part o .download y luego ya al finalizar es cuando dejan la extensión original.
Tienes razón. Por ejemplo, uso Chromium sin extensiones ni configuraciones adicionales y conserva la extensión original durante la descarga.
Más adelante comenté sobre una prueba que hice.
Saludos.
Me gusto la idea, pero sin cron y además en vez de usar $HOME me gusta usar más ~, se ve más elegante.
Hice la prueba de mover una imagen ISO mientras se descargaba, y curiosamente en la carpeta destino pude ver como la imagen seguía actualizándose (es decir, la descarga continuaba de forma transparente). Sin embargo, si por accidente intento descargar de nuevo (recuerda que el archivo ya no se encuentra en la carpeta original), el cron moverá nuevamente la imagen ISO a la carpeta destino, perdiéndose los cambios que se habían movido antes. Además, en el browser aparecen ahora dos hilos de descargas para el mismo archivo.
Encontré una forma de condicionar que se muevan solamente aquellas imágenes ISO que fueron actualizadas por última vez hace más de 15 minutos:
find $HOME/Descargas/ -name ‘*.iso’ -mmin +15 -exec mv ‘{}’ $HOME/ISOS \;
Por supuesto, no garantiza que el archivo haya sido descargado completamente (por ejemplo: pudo haberse cortado la red hace más de 15 minutos).
Espero que les pueda resultar útil.
muy buena idea, ¿tambien se podria hacer para ejecutarlo cuando tu quieras?,nose igual con, deskbar o creando un lanzador,es que cuando descargo (pdf o documentos) al escritorio es para acordarme de que tengo que mirarlo y si me lo mueve automaticamente despues se me pasa.
para ejecutarlo cuando quieras, es más útil lo que dice superpiwi… solamente tienes que omitir todo lo referente al crontab y vincular el script Mueve.sh en el lanzador de tu preferencia…
Saludos
Muy buena idea, me la apunto.
Para eso es mucho mejor la solución ofrecida por fsniper.
Voy a hacer un function() en bash y lo publico para imagenes ya como son varias extensiones.
Aqui la teneis son pocos formatos pero son los mas usados y quien quiera que ponga mas formatos es libre de hacer lo que quiera
#————————————#
#—-Hecho por Afsoon la function—-#
#————————————#
function extImg(){
DESTINO_IMAGENES=”$HOME/Imágenes”
ORIGEN=”$HOME/Escritorio”
mv $ORIGEN/*.png $DESTINO_IMAGENES
mv $ORIGEN/*.jpg $DESTINO_IMAGENES
mv $ORIGEN/*.gif $DESTINO_IMAGENES
}
Ya sabeis como se declaran las function asi que no hace falta que lo explique
yo lo he editado para que me lea algunos capitulos que me descargo y los mande a su seccion debidamente…
… :
me quedó asi
#!/bin/bash
#——————————————————————————————-
# Script para ejecutar por CRON cada 1 min, para organizar archivos en mis
# carpetas de documentos, descargas, musica, imagenes… XD
#——————————————————————————————-
# Siendo como soy un desastre, en busca del orden…
#
ORIGEN=”$HOME/downloads”
ORIGEN1=”$HOME”
ORIGEN2=”/tmp”
ORIGEN3=”$HOME/videos”
DESTINO1=”$HOME/images”
DESTINO2=”$HOME/music”
DESTINO3=”$HOME/videos”
DESTINO4=”$HOME/documents”
#series
DESTINO5=”$HOME/videos/series/7vidas”
DESTINO6=”$HOME/videos/series/modernfamily”
DESTINO7=”$HOME/videos/series/aida”
# reglas para mover imagenes
mv $ORIGEN1/*.jpeg $DESTINO1
mv $ORIGEN1/*.gif $DESTINO1
mv $ORIGEN1/*.jpg $DESTINO1
mv $ORIGEN1/*.bmp $DESTINO1
mv $ORIGEN1/*.png $DESTINO1
mv $ORIGEN/*.jpeg $DESTINO1
mv $ORIGEN/*.gif $DESTINO1
mv $ORIGEN/*.jpg $DESTINO1
mv $ORIGEN/*.bmp $DESTINO1
mv $ORIGEN/*.png $DESTINO1
#reglas para mover musica
mv $ORIGEN1/*.mp3 $DESTINO2
mv $ORIGEN1/*.wav $DESTINO2
mv $ORIGEN1/*.ogg $DESTINO2
mv $ORIGEN1/*.mid $DESTINO2
mv $ORIGEN/*.mp3 $DESTINO2
mv $ORIGEN/*.wav $DESTINO2
mv $ORIGEN/*.ogg $DESTINO2
mv $ORIGEN/*.mid $DESTINO2
mv $ORIGEN/*.m4a $DESTINO2
#reglas para mover pelis
mv $ORIGEN2/*.avi $DESTINO3
mv $ORIGEN2/*.flv $DESTINO3
mv $ORIGEN2/*.mov $DESTINO3
mv $ORIGEN2/*.mp4 $DESTINO3
mv $ORIGEN2/Flash* $DESTINO3
mv $ORIGEN1/*.rmv $DESTINO3
mv $ORIGEN1/*.rmvb $DESTINO3
mv $ORIGEN1/*.avi $DESTINO3
mv $ORIGEN1/*.flv $DESTINO3
mv $ORIGEN1/*.mov $DESTINO3
mv $ORIGEN1/*.mp4 $DESTINO3
mv $ORIGEN/*.rmv $DESTINO3
mv $ORIGEN/*.rmvb $DESTINO3
mv $ORIGEN/*.avi $DESTINO3
mv $ORIGEN/*.flv $DESTINO3
mv $ORIGEN/*.mov $DESTINO3
mv $ORIGEN/*.mp4 $DESTINO3
#Series
mv $ORIGEN3/*Vidas* $DESTINO5
mv $ORIGEN3/*M* $DESTINO6
mv $ORIGEN3/*Aida* $DESTINO7
mv $ORIGEN3/*aida* $DESTINO7
#reglas para mover documentos
mv $ORIGEN1/*.xls $DESTINO4
mv $ORIGEN1/*.tmp $DESTINO4
mv $ORIGEN1/*.pdf $DESTINO4
mv $ORIGEN1/*.doc $DESTINO4
mv $ORIGEN1/*.odt $DESTINO4
mv $ORIGEN1/*.txt $DESTINO4
mv $ORIGEN/*.xls $DESTINO4
mv $ORIGEN/*.tmp $DESTINO4
mv $ORIGEN/*.pdf $DESTINO4
mv $ORIGEN/*.doc $DESTINO4
mv $ORIGEN/*.odt $DESTINO4
mv $ORIGEN/*.txt $DESTINO4
#
# y programo esta entrada en cron:
#
# crontab -e
# */1 * * * * /****orden.sh
#
# Para que cada minuto ejecute el script y mueva para organizar archivos en mis
# carpetas de documentos, descargas, musica, imagenes… XD
#