[phpBB Debug] PHP Warning: in file [ROOT]/includes/acm/acm_memory.php on line 146: Cannot use a scalar value as an array
[phpBB Debug] PHP Warning: in file [ROOT]/includes/acm/acm_memory.php on line 146: Cannot use a scalar value as an array
[phpBB Debug] PHP Warning: in file [ROOT]/includes/acm/acm_memory.php on line 146: Cannot use a scalar value as an array
¿Cómo listo un determinado rango de archivos con ls? [SOLUCIONADO] : Programación
 Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 7 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Lun Oct 20, 2008 7:00 am
Mensajes: 95

Nota Publicado: Mar Sep 18, 2012 7:18 pm 
Arriba  
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.


Última edición por elmohino el Mar Sep 18, 2012 10:59 pm, editado 1 vez en total
 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Jue Abr 12, 2007 7:00 am
Mensajes: 9186
Ubicación: tras la pantalla (...)

Nota Publicado: Mar Sep 18, 2012 7:46 pm 
Arriba  
SEGURO que en el man hay alguna forma limpia de hacerlo, pero mientras tanto....
Código:
MIN=15
MAX=75
i=$MIN
while [ "$i" -lt "$MAX"  ]; do
  ls base.$i
  i=$i+1
done


por cierto: echale un ojo a la parte de las llaves (brace expansion, sorry no tengo ganas de buscar ahora :D ), porque yo juraria que se tiene que poder.... http://linux.die.net/man/1/bash

_________________
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil WWW  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Lun Oct 20, 2008 7:00 am
Mensajes: 95

Nota Publicado: Mar Sep 18, 2012 8:14 pm 
Arriba  
Amiga niky45, gracias por su respuesta, pero su script me da el siguiente fallo:

Código:
usuario@debian:~$ MIN=015 && MAX=047 && i=$MIN && while [ "$i" -lt "$MAX"  ]; do ls boda*$i && i=$i+1; done
boda_este.7z.015
bash: [: 015+1: se esperaba una expresión entera
usuario@debian:~$


Yo creo que he encontrado otra manera:



Código:
    usuario@debian:~$ ls [nombre_base]* | grep -A 32 [nombre_base].015
    [nombre_base].015
    [nombre_base].016
    .....
    [nombre_base].047
    usuario@debian:~$


Salud y gracias de nuevo.

 Perfil  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 8:00 am
Mensajes: 1457
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Mar Sep 18, 2012 9:30 pm 
Arriba  
@elmohino Imagino que sabrás que estás haciendo trampas gordas en tu script, y que basándome en la descripción del problema dado, tu script no sirve como solución.

Te pongo un caso verosímil:
Código:
[nombre_base].015
[nombre_base].016
[nombre_base].016.bak
[nombre_base].016.swp
[nombre_base].017

Los archivos temporales .bak y .swp (en este caso concreto) también se listarían, y lo que es peor, el 046 y 047 no.

Ahora bien, si me aseguras que eso no va a ocurrir nunca jamas, entonces adelante.

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Lun Oct 20, 2008 7:00 am
Mensajes: 95

Nota Publicado: Mar Sep 18, 2012 9:58 pm 
Arriba  
akodo escribió:
@elmohino Imagino que sabrás que estás haciendo trampas gordas en tu script, y que basándome en la descripción del problema dado, tu script no sirve como solución.

Te pongo un caso verosímil:
Código:
[nombre_base].015
[nombre_base].016
[nombre_base].016.bak
[nombre_base].016.swp
[nombre_base].017

Los archivos temporales .bak y .swp (en este caso concreto) también se listarían, y lo que es peor, el 046 y 047 no.

Ahora bien, si me aseguras que eso no va a ocurrir nunca jamas, entonces adelante.



Tiene Ud. mucha razón... También se listarían los archivos con extensión ~...

Habría que "limpiar" manualmente esos "residuos", o buscar otra manera (pero yo no soy un experto en bash). Quizás habría que filtrarlos de alguna manera (¿if then?).

Gracias por la puntualización.

Salud.

EDIT:

¡Basta de trampas gordas!:

Código:
    usuario@debian:~$ ls [nombre_base].??? | grep -A 32 [nombre_base].015
    [nombre_base].015
    [nombre_base].016
    .....
    [nombre_base].047
    usuario@debian:~$


Con el comodín "?" ya sólo se listarán los archivos con extensión de no más ni menos 3 caracteres.

Salud.


Última edición por elmohino el Mar Oct 02, 2012 4:50 pm, editado 1 vez en total
 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Jue Abr 12, 2007 7:00 am
Mensajes: 9186
Ubicación: tras la pantalla (...)

Nota Publicado: Mar Sep 18, 2012 10:04 pm 
Arriba  
perdon. se me paso.

niky45 escribió:
MIN=15
MAX=75
i=$MIN
while [ "$i" -lt "$MAX" ]; do
ls base.$i
i=$(($i+1))
done


por cierto, cuidado con el &&. la sintaxis para un one-liner seria sustituyendo los saltos de linea por el punto y coma ;, no opr el &&. y nota: NO todos.

aun asi, mucho mas practico una funcion, donde va a parar.....

Código:
listfiles(){
[ "$1" ] && MIN="$1" || MIN=0
# para que no haga cosas raras si no se especifca maximo. de lo contrario, entraria en un loop infinito.
[ "$2" ] && MAX="$2" || MAX=0
i=$MIN
while [ "$i" -lt "$MAX"  ]; do
  ls base.$i
 [color=#FF0000] i=$(($i+1))[/color]
done ; }
## y luego solo:
listfiles 20 35

_________________
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil WWW  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Lun Oct 20, 2008 7:00 am
Mensajes: 95

Nota Publicado: Mar Oct 02, 2012 4:53 pm 
Arriba  
Ahora sí funciona la línea de comandos (y usando ;, como Vd. aconseja).

Y muchas gracias por el script. Me va a servir de mucho.

Salud.


EDIT:

Tenía Vd. razón, amiga niky45, con las expansiones de bash:

Código:
ls [nombre_base].{015..047}


Así sólo se listarán desde el 015 al 047, ambos inclusive.

Salud.

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 7 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
[Solucionado] Configurar Sudo Para Que Un Usuario Ejecute Como Root Un Editor, Para Un Determinado Fichero De Config

en Redes y Servidores

DigitalUser

4

1047

Jue Abr 08, 2010 9:57 pm

DigitalUser Ver último mensaje

PCLinuxOS 2011.9 KDE mejorado y listo para el mundo drake

en Concurso Screenshots 2011

seadx6

2

1270

Mar Dic 27, 2011 1:32 am

seadx6 Ver último mensaje

¿Como reemplazo un determinado patron de caracteres de un archivo de texto?

en Software

pinguinosaurio

1

423

Mar Mar 02, 2010 11:29 am

akodo Ver último mensaje

Ipcop Rango De Ips

en Redes y Servidores

d3v1l

1

486

Lun Ago 23, 2010 9:19 pm

Deckon Ver último mensaje

fuera de rango

en Hardware

fusaca

3

655

Jue Abr 14, 2011 7:33 pm

fusaca Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO