Redireccionar un directorio con HTTP 301 y expresiones regulares

Hace bastante tiempo escrbí un artículo sobre redirecciones con HTTP 301 para ficheros.

Si queremos mover todos los ficheros contenidos en un directorio, con ese sistema deberíamos hacerlo uno a uno. Para ayudarnos en esta tarea podemos usar RedirectMatch y expresiones regulares:

redirectmatch 301 /antiguo/(.*) http://www.otraurl.com/$1

Lo que encontremos dentro del (.*) se trasladará al $1 en la nueva dirección. Todos los ficheros y carpetas que cumplan con la condición /antiguo(.*), es decir, que contengan /antiguo se redireccionarán al dominio www.otraurl.com.

Para más información puedes investigar sobre expresiones regulares.

Introducción a Bash: control de flujo en nuestro script (if/else)

Hoy vamos a añdadir un poco más de salsa a nuestra introdicción a Bash. Vamos a ver cómo funciona el if/else.

La estructura de un if/else en bash es la siguiente:

if [ condicion ]; then
      ...
else
      ...
fi

(el “else” es opcional).

Ojo, los corchetes deben ir siempre separados de la condición por un espacio.

Comparaciones aritméticas:

Aquí tenéis una lista de comparaciones que se pueden hacer entre números.

  • -lt : menor que (less than)
  • -gt : mayor que (greater than)
  • -le : menor o igual (less or equal)
  • -ge : mayor o igual (greater or equal)
  • -eq : igual a (equal)
  • -ne : distinto de (not equal)

Compraraciones con cadenas

  • = : igual
  • != : distinto
  • < : menor que
  • > : mayor que
  • -n c1 : se cumple si la cadena c1 no está vacía
  • -z s1 : se cumple si la cadena c1 está vacía

If anidados

Desde luego, se pueden usar if/else dentro de otros if/else, se pueden anidar sin problemas.

Ejemplo

Y para ilustrar todo esto vamos a ver un sencillo ejemplo que espera que le pasemos una palabra como parámetro:

#!/bin/bash
 
if [ $# -eq 0 ]; then
	echo "Dime algo, por favor"
else
	if [ $1 = 'hola' ]; then
		echo "Hola! que tal?"
	else
		echo "No te entiendo, solo entiendo la palabra 'hola'"
	fi
fi

Si lo guardamos en un fichero llamado if.sh y le damos permisos de ejecución (chmod +x if.sh) esto es lo que responderá dependiendo de qué parámetros usemos:

$ ./if.sh
Dime algo, por favor
$ ./if.sh nada
No te entiendo, solo entiendo la palabra 'hola'
$ ./if.sh hola
Hola! que tal?

Renombrar varios ficheros a la vez con PyRenamer

PyRenamer es un sencillísimo programa (sencillo de usar) que te permite renombrar un montón de ficheros de golpe. Ya expliqué hace un tiempo cómo cambiar la extensión de varios archivos de golpe desde la consola, pero seguramente este programa le resultará mucho más cómodo a la mayoría.

El programa está disponible bajo licencia GPL y, dado que está escrito en Python, debería funcionar en casi cualquier sistema operativo que disponga de Python y PyGtk (yo sólo lo he probado en mi Ubuntu).

Supongamos que queremos renombrar varios archivos con el siguiente formato:

Nombre serie – 1×01 – El comienzo.avi
Nombre serie – 1×02 – La continuación.avi
Nombre serie – 1×03 – El final.avi

al siguiente formato:

1×01 – El comienzo.avi
1×02 – La continuación.avi
1×03 – El final.avi

Podemos hacerlo siguiendo estos pasos:

Paso 0) Instalar el PyRenamer en nuestra máquina evidentemente.

1) Arrancar el programa.

2) Ir al directorio que contiene los archivos que queremos renombrar.

3) Seleccionamos la pestaña “Patrones”.

4) En “Patrón de selección de archivos” podemos dejar el “*” que viene por defecto o podemos cambiarlo para trabajar sólo con los archivos que nos interesen.

5) En “patrón de nombre de archivo original” escribimos:

Nombre serie - {#}x{#} - {X}

Las llaves sirven para indicar la parte que cambia:

{#} – Sirve para indicar un número
{X} – Sirve para indicar letras

6) En “patrón de nombre de archivo nuevo:

{1}x{2} - {3}

{1}, {2}, {3} son las coincidencias que ha encontrado en la cadena original, las partes que ha encontrado entre llaves.

En el primer caso:

Nombre serie - {#}x{#} - {X}

Con el fichero:

Nombre serie - 1x01 - El comienzo.avi

El primer {#} recogerá el “1”, el segundo {#} recogerá el “01” y {X} recogerá “El comienzo.avi”. Con lo que el nombre resultará en:

1x01 - El comienzo.avi

7) Pinchamos el botón “previsualizar” para ver si el renombrado se hace como esperábamos.

8 ) Hacemos click en renombrar y listo.

WordPress: listar subpáginas dentro de una página

Si quieres que cuando se visualice una página se muestren también sus páginas “hijas” puedes usar el siguiente código en tu plantilla:

<?php
  if($post->post_parent)
  $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
  else
  $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
  if ($children) { ?>
  <ul>
  <?php echo $children; ?>
  </ul>
  <?php } ?>

Sacado del codex de WordPress.

Introducción a bash: Pasar argumentos a un script bash

En esta segunda entrega de la miniguía de bash vamos a ver cómo pasar argumentos (o parámetros a un script bash).

En la primera entrega vimos cómo crear un fichero y hacerlo ejecutable. Siguiendo esas instrucciones puedes crear un fichero llamado parametros.sh y copiar lo siguiente:

#!/bin/bash
echo $1

Si invocamos el script con el siguiente comando:

parametros.sh primero

el resultado sería:

primero

Como vemos, el argumento “primero” ha quedado almacenado en la variable $1 (sí, con bash se pueden usar variables ¿no es maravilloso?).

El siguiente comando:

parametros.sh primero segundo

Nos mostrará lo mismo que antes:

primero

Los argumentos en bash se separan por un espacio, de tal forma “segundo” sería el segundo argumento. Para recogerlo y mostrarlo tendríamos que modificar nuestro script:

#!/bin/bash
echo $1
echo $2

Para recoger el tercer argumento usaríamos $3 y así sucesivamente.

Existe una variable, $#, que se crea automáticamente que contiene el número de argumentos que se han pasado al script:

#!/bin/bash
echo "Total argumentos: $#"

al llamarlo con:

parametros.sh primero segundo

mostrará:

Total argumentos: 2

También se crea automáticamente otra variable, $@, que es un array que contiene todos los argumentos. Si hacemos:

#!/bin/bash
echo $@

nos mostará todos los argumentos:

parametros.sh primero segundo

resultado:

primero segundo

Ya veremos en otra entrega cómo trabajar con este y otros arrays.

¿Qué utilidad tiene esto de los argumentos?

Los argumentos dan una gran flexibilidad a nuestros scripts ya que mediante ellos podemos indicar con qué fichero o directorio queremos trabajar o especificar un usuario por ejemplo.

¿Por qué no se guardan los archivos ocultos en mi archivo TAR?

Probablemente te habrás encontrado alguna vez con este problema al crear un archivo tar: los archivos ocultos en la carpeta “raíz” no se almacenan.

Suponiendo que tienes una carpeta ‘prueba/’ que contiene los siguientes archivos:

.fichero1
fichero2
fichero3

Si haces:

tar cf test.tar prueba/*

no se copiará el archivo .fichero1

Sin embargo si hacemos:

tar cf test.tar prueba/

Sí que se copiará.

Parece una tontería, pero si no te das cuenta puedes perder un montón de tiempo.

Por cierto esto lo encontré aquí.

Nueva versión de Urlan Heat

Después de un tiempo trabajando en ella en nuestros ratos libres hemos sacado por fin la nueva versión de la web Urlan Heat. Hemos hecho un pequeño experimento a ver qué tal resulta adaptando un WordPress a la estructura y diseño antiguos que teníamos. Para no perder el posicionamiento ni tener enlaces rotos hemos creado un .htaccess adecuado para redirigir todas las antiguas secciones. Veremos qué tal resulta.

Curso de PHP en Bilbao. Plazas disponibles

Como cada cierto tiempo estamos organizando un curso de programación en PHP en Bilbao. Tenemos un grupo ya casi cerrado (sería en horario de tarde) y quedan un par de plazas. Si quieres más información puedes ponerte en contacto con nosotros:

Tfno.: 94 421 58 40
Email: contactar@urlanheat.com

También hay algo más de información aquí.

GCStar – Gestiona tus colecciones de libros, películas, juegos, etc…

Si necesitas gestionar una colección de libros, películas, juegos, etc… existe un programa que te va a ayudar un montón, se llama GcStar.

Con él puedes crear una base de datos de libros con el título, autor, editorial, género, descripción, localización, e incluso puedes controla a quién se lo has prestado y cuándo.

Además, te permite crear tu propia colección personalizada por si las que vienen por defecto no se adaptasen a tus necesidades. Eso sí, para hacer esto hay que leerse el tutorial y tiene una cierta complicación.

Yo lo llevo usando un tiempo y estoy muy contento con él. Y a las personas a las que se lo he recomendado también les has encantado.

Por cierto, es GPL y hay versiones para Linux; Mac, BSD y Windows (necesita Perl, Gtk2 y gtk2-perl).

Lo encontré gracias a: http://mandriva.francescmm.com/2008/08/30/gcstar/

La consola de Linux: averiguar a qué grupos pertenece un usuario

Para saber a qué grupos pertenece un usuario basta con abrir un terminal (o consola) y usar el siguiente comando:

groups gorka

y nos mostrará un listado con todos los grupos a los que pertenece, por ejemplo:

gorka : gorka adm dialout cdrom plugdev lpadmin admin sambashare