¿Es posible especificar una ruta en la que el nombre de un directorio sea variable?

¿Es posible especificar una ruta en la que el nombre de un directorio sea variable?

PreguntandoestePregunta sobre reproductores MPV y DVD, me encontré con una pregunta más genérica: ¿es generalmente posible especificar una ruta en la que uno de los nombres de directorio sea variable?

Digamos que quiero ejecutar un archivo con un comando. El ejecutable está en /dir1/dir2/dir3/, pero el nombre de dir2es variable, aunque siempre contendrá dir3(similar a VIDEO_TS, que siempre es similar a /media/username/NAME-OF-DVD/VIDEO_TS/while NAME-OF-DVDvaría).

Si quiero ejecutar ese archivo con un comando, tengo que especificar la ruta. ¿Se puede utilizar un comando de este tipo (con una ruta en la que un nombre de directorio puede ser "genérico")?

Respuesta1

Bash puede hacer uso del globbing. Global le permite especificar un patrón que coincidirá con múltiples valores. Funciona de manera similar a REGEX, pero es importante tener en cuenta que no son iguales.

  • *(pattern)coincide con un patrón 0 o más veces
  • ?(pattern)coincide con un patrón 0 o 1 veces
  • +(pattern)coincide con un patrón 1 o más veces
  • [ ]puede coincidir con un valor contenido dentro, incluso [a-z]para a hasta z
  • ( | )Puede coincidir con los valores en cualquier lado de la tubería.

Si no pones un patrón, el patrón actúa como comodín.

Entonces, una ruta como /dir1/dir2/dir3/se puede representar como:

  • /dir1/*/dir3/
  • /dir1/dir*/dir3/
  • /dir1/*(dir2|otherdir)/dir3/
  • /dir1/dir*[1-99]/dir3/

Para más información consulta este enlace:http://mywiki.wooledge.org/glob

o este:http://www.linuxjournal.com/content/bash-extended-globbing

Respuesta2

Siempre y cuando el nivel de directorio variable sea un directorio único, lo que quiero decir con eso es que si lo tiene /dir1/dirX/dir3/dir4y la dirXparte no cambia como dirX/dirY/dirZpero solo puede ser uno de los dirX, dirYo dirZ, entonces puede hacer referencia /dir1/dirX/dir3/dir4como/dir1/*/dir3/dir4

En su caso mpv /media/username/*/VIDEO_TSdebería funcionar, aunque, dado que los títulos de los DVD suelen contener espacios, sugiero encerrar la ruta completa entre comillas dobles, como"/media/username/*/VIDEO_TS"

información relacionada