GNU/Linux - Hilo general

alfema

#11160 pero como es para un tema personal, no tengo prisa y, que me gusta buscar soluciones por mi mismo, salvo que esté atascado, que entonces sí pido ayuda, prefiero currármelo yo.

1
pantocreitor

#11159 Me explico ahora que estoy al PC xD

ls -1R directorioN1/*.foo

Esto no debe listar nada ya que directorioN1/*.foo no es un directorio, estás mezclando una búsqueda con una ruta a la hora de listar lo que hay dentro, no se si me explico.
Si haces

ls -1R directorioN1/example.foo

existiendo example.foo te mostrará ese archivo

Lo del find lo que te comento es que hay bastantes parámetros, y creo recordar que hay uno para desactivar las recursividad a parte de los niveles de esta (en #11158 lo he dicho justo al revés)

1 respuesta
alfema

#11162 la solución de chatgpg

ls -R | grep '\.foo$'
1 respuesta
Doest

#11157 Puedes usar tree si buscas escalonar de forma organizada directorios/archivos.

2 respuestas
pantocreitor

#11163 el grep es muy bueno, te sirve para filtrar.
Pasas el pipe co el grep a cualquier comando, por ejemplo al que ha puesto #11164 y te sirve igual.

1 respuesta
alfema

#11164 tree lo he usado alguna vez, quizás porque la salida que proporcionaba era la que me valía para lo que estaba haciendo, pero en este caso con find me vale.

#11165 lo de grep lo tenía contemplado, pero me emperré en que ls debía hacer lo que quería.

1
maxmalkav

#11157 sin mirar ChatGPT diría que es una limitación de la "expansión de nombre de archivos" (globbing). Los carácter comodín como * y ? son tratados por bash (o el shell que uses) y el resultado va al comando. El comando "ls" no recibe la expresión "*.foo", recibe el resultado de expandir esa expresión.

Suceden "problemas" similares cuando intentas ejecutar comandos con sudo y metes algo que requiere "gobbling", al no pasar por el terminal shell (o no al menos por uno "normal" con todas las funcionalidades y variables de entorno), no se produce la expansión de nombres de fichero y no funciona como esperas.

Conclusión a tu problema: ls puede hacer listado recursivo, pero realmente no es el que aplica filtros cuando usas caracteres comodín, eso sucede "fuera" de ls y lo hace el shell.


Por añadir una "prueba de concepto" :

  • crea un directorio con nombre "directorio.foo"
  • crea algunos archivos .foo dentro de "directorio.foo/"
  • ejecuta ls -R *.foo
  • PROFIT!
3
maxmalkav

#11167 doblepost con posible solución (para bash)

https://unix.stackexchange.com/questions/49913/recursive-glob

1 1 respuesta
alfema

#11168 con ese formato no funciona si le digo el directorio donde buscar, tendría que meterme dentro del directorio, no es recursivo, es decir si lo hago desde fuera de DirectorioN1, sólo muestra ficheros si están en ese mismo nivel, pero no si están en DirectorioN1.1, N1.2 o N1.3, tampoco funciona si pongo el parámetro R.

1 respuesta
draz1c

#11169 Lo acabo de probar y funciona, pero tienes que seguir las instrucciones que ponen en el enlace:

Primero verifica que tienes activado globstar, si tras ejecutar:

$ shopt globstar

Te devuelve:

globstar        off

Entonces ejecuta:

$ shopt -s globstar

Y ya te mostrará globstar on.

Entonces ya puedes usar el comando ls:

$ ls -R **/*.foo

o

$ ls -d -- **/*.foo

Ambas me devuelven los mismos resultados.

Aun así yo prefiero quedarme con el comando find, pero si necesitas si o si que sea con ls ahí lo tienes.

1 1 respuesta
alfema

#11170 lo hice y funcionó así tal cual, en mi respuesta comentaba que no funciona si le dices el directorio a buscar, que es lo que me interesa, eje.:

ls -R DirectorioN1/*.foo 

No quiero el resultado de todos los directorios, tal como comentas, al final el resultado que me sirve es el de find, con tree no lo probé, no lo tengo instalado y me da pereza hacerlo.

Get

#11098 yo suelo tirar de debian sin mierda, devuan.org instalacion minima tipo server y arreando.