Entries for Bash

Split en ShellScript: Obtener el último directorio de un path

written by uve

26 October 2011

La idea es bastante sencilla. Partimos de un path como entrada en uno de los parámetros en un ShellScript y necesitamos saber el último componente. Por ejemplo:

Entrada: /un/path/cualquiera
Valor que buscamos: cualquiera

Una posible solución es ésta:

#!/bin/bash

if [ $# -ne 1 ]
then
    echo "Usage: $0 path"
    exit -1
fi

path=$1
path_base=${path%/*}
name=${path##*/}

if [ $path_base = $name ]
then
    path_base=`pwd`
fi

echo "$path_base/$name"

Actualización (5/11/11):

Otra opción para los que no se quieran complicar la vida me la envía @dvelezyx vía Twitter:

basename `pwd`

Full entry >>

Volcar un archivo MDB en un fichero SQLite

written by uve

24 October 2011

Esta mañana contaba cómo extraer el esquema y datos de un archivo MS Access y ahora voy a poner un pequeño script que nos permita volcar todo el contenido directamente en una base de datos SQLite:

#!/bin/bash
MDB=fichero_access.mdb
DB=fichero_sqlite.db
TMPFILE=tmp.sql
echo "Extracting the schema"
mdb-schema $MDB > $TMPFILE
sed -e "s/^DROP TABLE\(.*\);/DROP TABLE IF EXISTS\1;/" -e "s/DateTime (.*)/DateTime/" $TMPFILE > schema.sql
echo "Creating SQLite DB"
sqlite3 $DB < schema.sql
echo "Extracting tables"
tables=`mdb-tables $MDB`
echo ""
for table in $tables
do
echo "Table: $table"
mdb-export -I -S $MDB $table > $TMPFILE
echo "PRAGMA journal_mode = MEMORY;" > table_$table.sql
sed -e "s/\(.*\)/\1;/" $TMPFILE >> table_$table.sql
	sqlite3 $DB < table_$table.sql
done
rm -f $TMPFILE

Full entry >>

Extraer el esquema y datos de un archivo MS Access

written by uve

24 October 2011

Hoy me he encontrado con un fichero .mdb del que necesito la información que contiene. Tengo que hacer uso, tanto de la estructura como las tuplas de información que contiene cada una de las tablas.

Tras un rato de buscar, he encontrado MDB Tools. Éstas son un conjunto de herramientas que nos permiten trabajar con estos archivos desde la línea de comandos. Así que he hecho este pequeño scrpit:

#!/bin/bash
DATABASE=archivo_access.mdb
mdb-schema $DATABASE > schema.sql
tables=`mdb-tables $DATABASE`

for table in $tables
do
    mdb-export -I -S $DATABASE $table > table_$table.sql
done

Full entry >>

Convertir imágenes RAW en JPG de forma autmática

written by uve

18 August 2011

Cuando hay una gran cantidad de fotos es un latazo tener que convertir una a una de forma manual. Para ello podemos utilizar ufraw-batch. Lo podemos instalar con lo siguiente:

# apt-get install ufraw-batch

Una vez instalada, basta con abrir una terminal, ir al directorio donde están las fotos y ejecutar:

$ ufraw-batch --out-type=jpeg *.CR2

En mi caso, las imágenes RAW tienen extensión CR2, formato que utiliza Canon. Cada cuál puede indicar su formato.

Full entry >>

Respetar múltiples líneas con echo

written by uve

3 August 2011

En ocasiones es útil recoger en una variable el resultado de un comando para procesarlo posteriormente (la salida de cat, grep, ...) y a la misma vez queremos mostrar ese contenido por pantalla con echo. El problema es que éste comando no respeta los saltos de líneas. Veamos un ejemplo:

$ ntpdate=`grep ntpdate /var/log/syslog`
$ echo $ntpdate
Aug 3 14:18:28 tx2500-Natty ntpdate[5233]: adjust time server 91.189.94.4 offset 0.015003 sec Aug 3 14:20:10 tx2500-Natty ntpdate[5323]: adjust time
server 91.189.94.4 offset -0.007577 sec Aug 3 14:20:57 tx2500-Natty ntpdate[5401]: adjust time server 91.189.94.4 offset 0.004040 sec Aug 3 14:22:18
tx2500-Natty ntpdate[5479]: adjust time server 91.189.94.4 offset -0.002003 sec Aug 3 14:29:58 tx2500-Natty ntpdate[5670]: adjust time server
91.189.94.4 offset 0.001987 sec Aug 3 14:31:46 tx2500-Natty ntpdate[5746]: adjust time server 91.189.94.4 offset -0.001275 sec Aug 3 15:26:02
tx2500-Natty ntpdate[6593]: adjust time server 91.189.94.4 offset -0.286619 sec Aug 3 15:26:25 tx2500-Natty ntpdate[6639]: adjust time server
91.189.94.4 offset -0.278193 sec Aug 3 15:41:25 tx2500-Natty ntpdate[6751]: adjust time server 91.189.94.4 offset 0.066937 sec Aug 3 15:49:57
tx2500-Natty ntpdate[6824]: adjust time server 91.189.94.4 offset -0.032212 sec

Para evitar esto basta con utilizar "dobles comillas":

$ echo "$ntpdate"
Aug  3 14:18:28 tx2500-Natty ntpdate[5233]: adjust time server 91.189.94.4 offset 0.015003 sec
Aug  3 14:20:10 tx2500-Natty ntpdate[5323]: adjust time server 91.189.94.4 offset -0.007577 sec
Aug  3 14:20:57 tx2500-Natty ntpdate[5401]: adjust time server 91.189.94.4 offset 0.004040 sec
Aug  3 14:22:18 tx2500-Natty ntpdate[5479]: adjust time server 91.189.94.4 offset -0.002003 sec
Aug  3 14:29:58 tx2500-Natty ntpdate[5670]: adjust time server 91.189.94.4 offset 0.001987 sec
Aug  3 14:31:46 tx2500-Natty ntpdate[5746]: adjust time server 91.189.94.4 offset -0.001275 sec
Aug  3 15:26:02 tx2500-Natty ntpdate[6593]: adjust time server 91.189.94.4 offset -0.286619 sec
Aug  3 15:26:25 tx2500-Natty ntpdate[6639]: adjust time server 91.189.94.4 offset -0.278193 sec
Aug  3 15:41:25 tx2500-Natty ntpdate[6751]: adjust time server 91.189.94.4 offset 0.066937 sec
Aug  3 15:49:57 tx2500-Natty ntpdate[6824]: adjust time server 91.189.94.4 offset -0.032212 sec

Full entry >>

Breves: Cómo crear un lanzador personalizado con varios comandos en Gnome

written by uve

11 December 2010

Alguna que otra vez he necesitado crear (o me gusta tener) un lanzador de aplicaciones que involucra la ejecución de varios comandos. Lo más típico, tener que lanzar una aplicación desde un directorio determinado:

$ cd ruta/de/aplicacion/
$ ./mi_aplicacion

Lo primero que pensé:

cd ruta/de/aplicacion/ && ./mi_aplicacion

pero esto no le gusta al lanzador de aplicaciones, no es un shell. ¿La solución? ¡Que lo ejecute un shell! :)

bash -c 'cd ruta/de/aplicacion/ && ./mi_aplicacion'

Full entry >>

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.