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

1

Perguntando esta pergunta no 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 é 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/ , enquanto NAME-OF-DVD varia).

Se eu quiser executar esse arquivo com um comando, preciso especificar o caminho. Um tal comando pode ser usado (com um caminho no qual um nome de diretório pode ser "genérico")?

    
por cipricus 18.02.2016 / 17:09

2 respostas

2

Bash pode fazer uso de globbing. Globbing permite que você especifique um padrão que corresponda a vários valores. Ele funciona de forma semelhante ao REGEX, mas é importante notar que eles não são os mesmos.

  • *(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, incluindo [a-z] de a até z
  • ( | ) pode corresponder valores em ambos os lados do tubo

Se você não colocar um padrão, o padrão funcionará como curinga.

Assim, 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: link

ou este: link

    
por 18.02.2016 / 18:09
2

contanto que o nível de diretório variado seja um único diretório, o que quero dizer com isso, se você tiver /dir1/dirX/dir3/dir4 e a dirX não estiver mudando como dirX/dirY/dirZ , mas só pode ser uma das dirX , dirY ou dirZ , então você pode referenciar /dir1/dirX/dir3/dir4 as /dir1/*/dir3/dir4

No seu caso, mpv /media/username/*/VIDEO_TS deve funcionar, embora, como os títulos de DVD geralmente contenham espaços, sugiro colocar o caminho inteiro entre aspas duplas, como "/media/username/*/VIDEO_TS"

    
por 18.02.2016 / 19:02