wget

wget

Para realizar esta tarea utilicé el comando wget. Para especificar o dar formato a la URL encontré 3 opciones: awk, sed y el mismo comando wget.

awk me pareció el más complejo por eso no lo utilicé. La opción wget -i es la más senciclla pero necesitas tener en el archivo las url’s  fijas de los archivos que quieres descargar, yo tenía una URL dinámica para cada archivo. El comando sed me pareció la opción mas viable para resolver mi problema.

La url de los archivos que quería descargar era

http://127.0.0.1:8080/ReportViewer/run?__format=xls&__report=rptInformeMensual.rptdesign&REPORTE=ID_REPORTE

la variable ID_REPORTE la tenía en un archivo CSV de la siguiente manera

35ac0194-6992-402d-aa8e-79ae9866b90a COMPRAS
66fbf25f-74ab-412c-abf9-87769582cf48 DIRECCIÓN DE PSICOLOGÍA
7b781032-e529-4d2d-b497-b47b39195688 DIRECCIÓN JURÍDICA
76612f8a-944d-4ce3-bfa6-e9a83a787480 ACTIVO FIJO
...

la primer columna es el id del reporte y la segunda la descripción.

El comando que utilicé fue el siguiente

sed 's/\(.*\)\t\(.*$\)/"http:\/\/127.0.0.1:8080\/ReportViewer\/run?__format=xls\&__report=rptInformeMensual\.rptdesign\&REPORTE=\1" -O "\2\.xls"/' reportes.txt | xargs -l1 wget

Puedes ejecutar sólo la primera parte del comando para revisar que estas pasando los parámetros correctos a wget.

sed recibe como parámetro una cadena con el formato ‘s/regex/substitution/’, regex es una expresión regular que en nuestro caso es el texto hasta el carácter de tabulación ‘\t’ y para el segundo grupo el texto restante hasta el fin de línea indicado por ‘$’. En la expresión regular y en la cadena de substitución hay que tener cuidado de escapar los carácteres especiales como la diagonal, el punto y el ampersand. Los grupos de la expresión regular los insertamos de acuerdo a su posición en la exresión regular \1, \2, \3, etc.

Fuentes:
http://askubuntu.com/questions/103623/download-files-from-a-list
http://unix.stackexchange.com/questions/41598/using-csv-line-as-command-parameters
http://unix.stackexchange.com/questions/32907/what-characters-do-i-need-to-escape-when-using-sed-in-a-sh-script

Anuncios

Tenía un respaldo de mis archivos en una carpeta y quería restaurar los archivos incluyendo carpetas y archivos ocultos (.git, .svn, etc), excepto las carpetas del sistema como .gnome2, .gconf, .compiz, .local; ni archivos como .bashrc, .bash_history, .profile, etc. Estas carpetas y archivos están situados en la raíz del directorio de mi usuario.

Para poder excluirlas de la sincronización basta con la siguiente línea

rsync -av –exclude ‘/.‘ –exclude ‘/./’ /mnt/backup/home/cirovladimir/ /home/cirovladimir/

La parte importante es la diagonal inicial en los patrones exclude, el primero le indica que excluya todos los archivos que comienzan con un punto situados en la raíz del directorio, y el segundo le indica las carpetas. También es importante que incluyas la diagonal al final del directorio ‘origen’ y al final del direcotrio ‘destino’.

De esta forma omitirá todos los archivos y carpetas ocultas del primer nivel (raíz) pero sincronizará los archivos y carpetas ocultas que se encuentren en los subdirectorios.

Fuente:
http://programmersnotebook.wordpress.com/2010/03/20/rsync-and-exclude-from/

Si al conectar tu Galaxy Nexus (Android 4.1.1) en modo MTP, Nautilus se congela y luego te muestra un mensaje de error parecido al siguiente

DBus error org.freedesktop.DBus.Error.NoReply

Esto se debe a un bug que existe en algunas librerías. Afortunadamente este error ya fue corregido, pero no ha sido publicado en el repositorio de Ubuntu 12.04 -si tienes Quantal (12.10), sólo instala las actualizaciones-

Para actualizar las librerías podemos instalar el repositorio PPA de Philip Langdale con el siguiente comando

sudo add-apt-repository ppa:langdalepl/gvfs-mtp

y después hacer la actualización

sudo apt-get update && sudo apt-get upgrade

Con esto ya podrías reconectar tu Nexus y ver los archivos en Nautilus.

Si por equivocación agregaste algunos archivos al control de versiones en git, puedes quitarlos de la siguiente manera.

git rm --cached <file>

Si son multiples los archivos que quieres remover y los puedes listar mediante un patrón, puedes hacer lo siguiente:

git ls-files | grep '.*\.rptconfig' -Z | xargs -0 git rm --cached

Este comando removerá todos los archivos que correspondan a la expresión regular (archivos con extensión ‘.rptconfig’). El parámetro -Z en grep y -0 en xargs evita que tengamos problemas con archivos cuyo nombre o ruta contenga espacios.

Si el patrón es sencillo (como en el caso anterior) puedes utilizar el siguiente comando

git ls-files '*.rptconfig' -z | xargs -0 git rm --cached

nótese que el parámetro -z es con letra minúscula.

Fuentes:
stackoverflow

Cuando ejecutas una aplicación GWT en Eclipse -ya sea Debug as Web Application ó Run as Web Application- utiliza Jetty como servidor web.

En una aplicación necesitaba poner una serie de archivos disponibles en dicho servidor. Como los archivos ya los tenía en una carpeta, no quise copiarlos a una carpeta en el servidor web (src/main/webapp), así que creé un enlace simbólico a la carpeta. Al querer acceder a los recursos me aparecía el siguiente mensaje en el log

[WARN] Aliased resource: file:/home/cirovladimir/projects/java/videohaus/videohaus-gwt/target/videohaus-gwt-0.0.1-SNAPSHOT/storage/videos/demo.mp4==file:/home/cirovladimir/Videos/videohaus/demo.mp4
[WARN] 404 – GET /storage/videos/demo.mp4 (127.0.0.1) 1446 bytes

El problema es que, por cuestiones de seguridad, Jetty no permite acceder a los recursos mediante un alias (mayúsculas y minúsculas, nombres cortos, enlaces simbólicos y carácteres extras).

Para desactivar esta carácteristica y permitir los enlaces simbólicos, podemos agregar un parámetro a la configuración de ejecución. Selecciona el proyecto y da clic en el menú “Run->Debug Configurations..”, luego agrega el parámetro “-Dorg.mortbay.util.FileResource.checkAliases=false” en la pestaña de argumentos en la sección de argumentos de la máquina virtual.

UPDATE: Existe una opción con el comando “mount” para montar una carpeta local en otra, y con esto ya no es necesario configurar Jetty para seguir los enlaces simbólicos. El comando es

 sudo mount --bind origen nueva_carpeta
 

si quieres que el montaje permanezca después de reiniciar tu computadora, agrega la siguiente línea en el archivo /etc/fstab

 origen &nbsp; nueva_carpeta &nbsp; none   bind   0   0
 

curiosamente esta solución la encontré cuando investigaba como montar una carpeta mediante NFS.

Fuentes:
https://groups.google.com/d/msg/google-web-toolkit/kMZv6jkYitw/yYfM54duu3wJ
http://docs.codehaus.org/display/JETTY/How+to+enable+serving+aliased+files
https://help.ubuntu.com/community/SettingUpNFSHowTo

Para convertir una serie de imágenes a un archivo PDF puedes ejecutar el siguiente comando en una terminal

convert *.jpg file.pdf

Este comando funciona siempre y cuando tengas instalado imagemagick, si no lo tienes, instalalo mediante

sudo apt-get install imagemagick gs

Las imágenes se agregaran al archivo en el mismo orden que aparecen con el comando ls, así que si las tienes numeradas de la siguiente manera

imagen1.jpg
imagen2.jpg

imagen10.jpg
imagen11.jpg

tendrás que renombrarlas a

imagen01.jpg
imagen02.jpg

imagen10.jpg
imagen11.jpg

para que te aparezcan en orden dentro del PDF

Fuentes:
http://www.ubuntu-es.org/node/36187 

Para eliminar un archivo en git, debes utilizar el comando ‘git rm’. Muchas veces en vez de hacer esto, lo borramos directamente desde un navegador de archivos o desde nuestro IDE (Eclipse). Si este es tu caso, notarás que el comando ‘git status’ te muestra los archivos eliminados, pero no los agregará en el commit a menos que ejecutes el comando ‘git add -u’ o ‘git commit -a’. El inconveniente de hacer esto es que no sólo agregará los archivos eliminados sino todos los demás cambios que hayas hecho.

 

# On branch tracking2
# Changed but not updated:
#   (use “git add/rm <file>…” to update what will be committed)
#   (use “git checkout — <file>…” to discard changes in working directory)
#
#       deleted:    test.txt
#

Si quieres hacer un commit exclusivamente de los archivos que eliminaste, puedes ejecutar los siguientes comandos

 

git ls-files –deleted | xargs git rm
git commit

El primero ejecuta el comando ‘git rm’ sobre cada archivo eliminado y el segundo, pues, hace el commit.

Fuentes:
http://stackoverflow.com/questions/1402776/how-do-i-commit-all-deleted-files-in-git