É possível especificar um caminho no qual o nome de um diretório seja variável?

É possível especificar um caminho no qual o nome de um diretório seja variável?

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-DVDvaria).

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/dir4e a dirXparte não estiver mudando dirX/dirY/dirZ, mas só puder ser um dos dirX, dirYou dirZ, então você pode referenciar /dir1/dirX/dir3/dir4como/dir1/*/dir3/dir4

No seu caso mpv /media/username/*/VIDEO_TSdeve 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"

informação relacionada