Guión para cambiar un carácter (o varios) en el nombre de ficheros

Como podéis comprobar todos aquellos que tengáis instalado ownCloud, existe una serie de caracteres que os provocan el error : “Files contains invalid characters…” cuando sincronizáis con el cliente de escritorio.

Si optáis por la solución cómoda como es cambiar el nombre, quitando el carácter problemático por otro (‘_’ es una buena opción), en GNU/Linux, con esta orden ejecutada desde el directorio que sincronizáis, sobra:

find . -type f -name ‘*:*’ | while read fich; do echo “Moving $fich a ${fich//[:]/_}”; mv “$fich” “${fich//[:]/_}”; done

Con ella cambio el carácter ‘:’ por ‘_’. Si queréis generalizar la orden para más caracteres, solo tenéis que modificar la expresión “${fich//[:]/_}” en los 2 sitios donde aparece y también el patrón ‘*:*’.

¡Espero que os sea útil!

PD: la orden echo “Moving $fich a ${fich//[:]/_}” es solo informativa; puede no estar.

Actualización:

PD2: Lo que aparece en negrita es una actualización. Se me olvidó indicar el patrón que busca ficheros cuyo nombre contiene el carácter deseado.


Muy breve: ¿Cómo averiguar los N procesos que más CPU consumen?

Este sencillo guión nos lo permite

#!/bin/bash
[ $# -lt 2 ] || [ $# -gt 2 ] && echo "Uso: consumo.sh -c N " && exit 1
[ "$1" != "-c" ] && echo "Uso: consumo.sh -c N " && exit 2
[[ "$2" =~ ^[0-9]+$ ]] && ps e -o pcpu,state,args --sort pcpu|tail -n $2 && exit 0
echo "Uso: consumo.sh -c N , con 'N' número entero" 
exit 3

Cada línea significa:

  1. Comprobamos que se indican 2 argumentos. Si no salimos.
  2. Que el primero es ‘-c’. Si no salimos.
  3. Que el segundo es un número (para ello utilizamos la expresión regular ^[0-9]+$ y el comando [[ ]]) y, en este caso, ejecutamos la orden ‘ps’ ordenada por consumo de CPU y nos quedamos con el número de salidas indicadas en $2 y terminamos sin error.
  4. Se notifica que el segundo argumento debe ser un entero y se termina con el error 3.

Pregunta: ¿Por qué es necesario en la expresión regular ^[0-9]+$, poner ^ al principio y $ al final? ¿Es necesario?

Referencias:

Expresiones regulares: http://www.regular-expressions.info/


Lista de puertos usados por un proceso…

Dado el PID  y sin necesidad de netstat o herramientas similares, podéis saber qué puertos tiene en uso (y su estado y mucha más información) dicho proceso con algo parecido a esto:

ls -la /proc/$proceso/fd | grep socket | cut -d’>’ -f2|cut -d’:’ -f2 | while read id; do grep $id /proc/net/tcp; done;

La información resultante la podéis interpretar con la documentación del Kernel de GNU/Linux (proc_net_tcp.txt), si no os aclara la primera línea del fichero /proc/net/tcp:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops

Para el caso que me ocupaba, sobraba con saber que de la línea:

4: 00000000:445C 00000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 71298 1 f61904c0 300 0 0 2 -1

el primer campo (4) es un identificador de entrada; el segundo (00000000:445C) son la IP de origen y el puerto de origen; el tercero es la IP y puerto de destino y el cuarto (0A) es el estado (0A= Listen)

Si alguien no se fía de los resultados que le muestran sus herramientas, recordad que siempre está /proc


Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. Más información.