
Спрашиваюэтотвопрос о mpv-плеере и dvd, я наткнулся на более общий вопрос: возможно ли вообще указать путь, в котором одно из имен каталогов является переменным?
Допустим, я хочу выполнить файл с помощью команды. Исполняемый файл находится в /dir1/dir2/dir3/
, но имя dir2
— переменная, хотя оно всегда будет содержать dir3
(аналогично VIDEO_TS
, что всегда похоже на /media/username/NAME-OF-DVD/VIDEO_TS/
while NAME-OF-DVD
variations).
Если я хочу выполнить этот файл с помощью команды, я должен указать путь. Можно ли использовать такую команду (с путем, в котором одно имя каталога может быть "generic")?
решение1
Bash может использовать подстановку. Подстановка позволяет вам указать шаблон, который будет соответствовать нескольким значениям. Он работает аналогично REGEX, но важно отметить, что это не одно и то же.
*(pattern)
соответствует шаблону 0 или более раз?(pattern)
соответствует шаблону 0 или 1 раз+(pattern)
соответствует шаблону 1 или более раз[ ]
может соответствовать значению, содержащемуся внутри, включая[a-z]
значения от a до z( | )
может сопоставлять значения по обе стороны трубы
Если вы не укажете шаблон, он будет действовать как подстановочный знак.
Таким образом, такой путь /dir1/dir2/dir3/
можно представить как:
/dir1/*/dir3/
/dir1/dir*/dir3/
/dir1/*(dir2|otherdir)/dir3/
/dir1/dir*[1-99]/dir3/
Для получения более подробной информации перейдите по этой ссылке:http://mywiki.wooledge.org/glob
или этот:http://www.linuxjournal.com/content/bash-extended-globbling
решение2
пока изменяющийся уровень каталога представляет собой один каталог, что я имею в виду, если у вас есть /dir1/dirX/dir3/dir4
и dirX
часть не изменяется, как dirX/dirY/dirZ
, но может быть только одним из dirX
, dirY
или dirZ
, то вы можете ссылаться /dir1/dirX/dir3/dir4
как/dir1/*/dir3/dir4
В вашем случае mpv /media/username/*/VIDEO_TS
должно сработать, хотя, поскольку названия DVD обычно содержат пробелы, я предлагаю заключить весь путь в двойные кавычки, например:"/media/username/*/VIDEO_TS"