
Perguntandoessepergunta sobre mpv player e dvds, me deparei com uma pergunta mais genérica: geralmente é possível especificar um caminho no qual um dos nomes de diretório seja variável?
Digamos que eu queira executar um arquivo com um comando. O executável está em /dir1/dir2/dir3/
, mas o nome de dir2
é variável, embora sempre contenha dir3
(semelhante a VIDEO_TS
, que é sempre semelhante a /media/username/NAME-OF-DVD/VIDEO_TS/
while NAME-OF-DVD
varia).
Se eu quiser executar esse arquivo com um comando, preciso especificar o caminho. Esse comando pode ser usado (com um caminho no qual um nome de diretório pode ser "genérico")?
Responder1
Bash pode fazer uso de globbing. Globbing permite especificar um padrão que corresponderá a vários valores. Funciona de forma semelhante ao REGEX, mas é importante observar que eles não são iguais.
*(pattern)
corresponde a um padrão 0 ou mais vezes?(pattern)
corresponde a um padrão 0 ou 1 vezes+(pattern)
corresponde a um padrão 1 ou mais vezes[ ]
pode corresponder a um valor contido nele, inclusive[a-z]
de a a z( | )
pode corresponder aos valores em ambos os lados do tubo
Se você não colocar um padrão, o padrão funcionará como um curinga.
Portanto, um caminho como /dir1/dir2/dir3/
pode ser representado como:
/dir1/*/dir3/
/dir1/dir*/dir3/
/dir1/*(dir2|otherdir)/dir3/
/dir1/dir*[1-99]/dir3/
Para mais informações confira este link:http://mywiki.wooledge.org/glob
ou este:http://www.linuxjournal.com/content/bash-extended-globbing
Responder2
contanto que o nível de diretório variável seja um único diretório, o que quero dizer com isso, se você tiver /dir1/dirX/dir3/dir4
e a dirX
parte não estiver mudando dirX/dirY/dirZ
, mas só puder ser um dos dirX
, dirY
ou dirZ
, então você pode referenciar /dir1/dirX/dir3/dir4
como/dir1/*/dir3/dir4
No seu caso mpv /media/username/*/VIDEO_TS
deve funcionar, embora, como os títulos de DVD geralmente contêm espaços, sugiro colocar todo o caminho entre aspas duplas, como"/media/username/*/VIDEO_TS"