Bash – N entradas más recientes

Objetivo: 

Consultar las N entradas (ficheros, directorios o ambos) más recientes en un determinado directorio para borrar, copiar, renombrar, etc, etc

Etapas:

  • listar los nombres de los elementos
ls -dt
  • filtrar cuantas entradas queremos mantener
  • +N = N entradas más recientes | -N = N entradas más antiguas

tail -n +N
  • ejecutar la orden que necesitemos
xargs FUNCTION

Si concatenamos cada comando con el anterior, obtendremos

# Mantener últimos 3 ficheros de logs del sistema
 ls -dt /var/log/syslog* | tail -n +4 | xargs rm -rf

# Copiar el último backup a un NAS
 ls -dt /tu/ruta/al/backup | tail -n -2 |  xargs -i cp {} /ruta/al/NAS

Bash – jugando con variables

Formateando variables

Si necesitas formatear una variable por ejemplo, para que contenga un determinado número de caracteres

  • 2 -> 0002
  • 20 -> 0020
  • 200 -> 0200

Basta con utilizar el comando printf tal que

 printf -v var_destino "%04d" var_origen

Para conocer más sobre prinf, puedes pasar por aquí y écharle un vistazo a todo lo que puedes conseguir.

Contenido como nombre de variable

Otra necesidad con la que me he topado ha sido nombrar a una variable de forma dinámica en función del contenido de otra variable. Para ello podemos utilizar la asignación del siguiente modo:

//aux contiene un valor variable en función de i y j
aux=$i$j 

//renombramos a seq con el contenido de aux
seq=${!aux} 

//pintamos el valor que contiene la variable con nombre $i$j
echo $seq 


Bash – ejecutar codigo sql

Estás programando un bonito script en bash, necesitas conectarte a una base de datos Oracle y lanzar un puñado de sentencias.

Fácil y sencillo

#!/usr/bin/bash

sqlplus -silent $user/$password@$sid << EOF
@file.sql
EOF

Si solo es una sentencia lo que necesitas lanzar (y guardar el resultado en una variable) quizás te sea más rápido el siguiente código

var=`sqlplus -silent $login/$password << SQLscript
            set pagesize 0
            set verify off
            set head off
            set feedback off
            sql_sentence;
            exit;
           SQLscript
 `

Donde $user, $password y $sid son variables definidas previamente