
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 dir2
es variable, aunque siempre contendrá dir3
(similar a VIDEO_TS
, que siempre es similar a /media/username/NAME-OF-DVD/VIDEO_TS/
while NAME-OF-DVD
varí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/dir4
y la dirX
parte no cambia como dirX/dirY/dirZ
pero solo puede ser uno de los dirX
, dirY
o dirZ
, entonces puede hacer referencia /dir1/dirX/dir3/dir4
como/dir1/*/dir3/dir4
En su caso mpv /media/username/*/VIDEO_TS
deberí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"