BandaAncha.eu

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

¿Cómo listo un determinado rango de archivos con ls?

BocaDePez
BocaDePez

Hola, buenas tardes.

En un directorio en el que tengo multitud de archivos ordenados numéricamente (*.001, *.002, etc.) quisiera poder listar solamente un determinado rango de ellos (p.e., desde el [nombre_base].015 hasta el [nombre_base].047) sin tener que escribirlos todos.

Muchas gracias.

BocaDePez
BocaDePez

Tendrás que hacerlo dentro un bucle for, ya que de por sí solo el comando ls, aunque potente, no tiene la posibilidad de definir rangos.

quilloquepasa
1

Utiliza grep con expresiones regulares.

Más información en man grep.

Saludos ;)

🗨️ 2
BocaDePez
BocaDePez

Sr. quilloquepasa, gracias una vez más:

usuario@debian:~$ ls [nombre_base]* | grep -A 32 [nombre_base].015

[nombre_base].015

[nombre_base].016

.....

[nombre_base].047

usuario@debian:~$

Explicación de lo anterior:

- Con ls se indica que, en un principio, se listen todos los archivos que empiezan por [nombre_base]*

- El resultado se envía con la tubería | al comando grep -A 32 [nombre_base].015, el cual filtra los resultados de ls desde el archivo [nombre_base].015 hasta 32 resultados posteriores a [nombre_base].015, es decir, hasta [nombre_base].047 (47 - 15 = 32)

🗨️ 1
quilloquepasa

A tu disposición.

Saludos ;)

Pridebowl

Para eso se usa de toda la vida las expansiones de bash.
Es decir:
ls archivo.0{15..47}

Miratelas que son muy potentes.

🗨️ 3
BocaDePez
BocaDePez

Oh, gracias, sr. Pridebowl. Funciona perfectamente.

El método del sr. quilloquepasa también es muy bueno, salvo que si en el directorio se encuentran archivos con extensión, p.e., *015.bak ó *015~, éstos también se listan. Con su método de momento no he tenido ese problema.

Muchas gracias. Un saludo.

🗨️ 2
mceds

El asunto es que el señor quilloquepasa ha recomendado el uso de expresiones regulares y eso es mucho más que poner un par de asteriscos. De hecho, con el grep normal (sin la opción -e) eso sigue siendo expansión de shell. Así que no hay "método del señor quilloquepasa que liste archivos que no tiene que listar". Las expresiones regulares son tan increiblemente potentes como mareantes en su sintaxis.

🗨️ 1
BocaDePez
BocaDePez

Sí, es cierto. No es el método del sr. quilloquepasa, sino el mío (por poner el comodín *). Mis disculpas al sr. quilloquepasa.

De todas formas, basándome en mi "método" y en el ejemplo en concreto, creo que hay una solución para no listar archivos indeseados:

usuario@debian:~$ ls [nombre_base].??? | grep -A 32 [nombre_base].015

[nombre_base].015

[nombre_base].016

.....

[nombre_base].047

usuario@debian:~$

El comodín ? es más "individualista" que *.

Gracias por la puntualización, sr. mceds.

Un saludo.