Los globs te ayudan: cómo borrar todos los ficheros excepto uno

Nautilus en Ubuntu

Los globs y las pipes de Unix son muy beneficiosas en muchos casos cuando trabajamos desde la consola. Todos ustedes habrán usado las tuberías o habrán usado los famosos caracteres como el comodín * para sustituir a nombres, etc. Pues bien, seguro que también se habrán encontrado con el problema de querer borrar todos los ficheros de un directorio excepto uno o varios de ellos. Si hay pocos no es un problema, se puede hacer fácilmente incluso desde el modo gráfico.

Pero si existen muchísimos y estamos trabajando desde la consola la cosa se complica un poco más. Pero eso es solo por no tener recursos, ya que existen opciones sencillas que podemos explotar para que nos ayuden a que tareas complicadas se transformen en algo de lo más sencillo. Pues bien, en éste sencillo tutorial os explicamos cómo poder hacer eso solo usando un simple símbolo… Fácil, verdad? Pues vamos a pasar a la práctica:

Lo primero, yo voy a imaginar que tenemos un directorio llamado Fotos en el que queremos borrar todos los ficheros de imágenes .jpeg que hay en su interior. Vamos a imaginar que hay 100 fotos. Y que las queremos a eliminar todas excepto una de ellas que se llama nat7.jpg. El primer paso es dirigirnos hasta dicho directorio con ayuda del comando cd. Por ejemplo:


cd /home/Fotos

Luego usaremos el comando rm como hacemos frecuentemente cunado queremos borrar algo, pero le indicaremos que queremos borrarlo todo menos esa foto que queremos conservar, para ello usaremos el carácter ! tal que así:


rm -f !(nat7.jpg)

Con eso le estamos negando el borrado a rm para que borre todo excepto el fichero llamado nat7.jpg. Si te diriges al directorio y haces un listado del contenido, podrás comprobar que efectivamente se ha borrado todo menos la foto deseada:


ls /home/Fotos

Ahora puedes jugar con este glob para hacer otras cosas, como por ejemplo borrar todos los ficheros de un directorio menos los de MP3 con !(*.mp3) o también salvar del borrado a varios ficheros o formatos como por ejemplo con !(nat7.jpg | isa5.jpg) o con !(*.txt | *.mp3). Las posibilidades son muchas…¡Esto es Unix, esto es Linux!


Categorías

GNU / Linux, Recursos

Isaac

Soy un apasionado de la tecnología, F1 e informática... y me encanta compartir, pero sobre todo aprender cada día más. En definitiva me gusta... Ver perfil ›

3 comentarios

  1.   Gregorio Ros dijo

    ¡No hay día que no aprendamos algo!. A pesar de que llevo unos 30 años trasteando con los PCs y casi 20 con Linux no soy muy dado a la consola, reconozco que es tremendamente util, pero siempre he sido perezoso a la hora de memorizar comandos y celebre el paso al modo gráfico. No conocía para nada esta opción de los globs y aunque no me fue dificil sobrevivir sin ella hay que concederle que pinta super util y practica, por añadidura facil de entender y de aplicar. Tomo buena nota.
    Gracias por un aporte que no dudo me será muy util.

  2.   9acca9 dijo

    Hola.
    Muchas gracias pero…
    rm -f !(*.exe)
    bash: !: event not found

    1.    Isaac P. E. dijo

      Hola,

      Prueba a activar esto:

      shopt -s extglob; set -H

      Y luego intenta de nuevo:

      rm -f !(*.exe)

      Un saludo! Espero que te funcione. Y gracias por seguirnos…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *