询问这关于 mpv 播放器和 DVD 的问题,我偶然发现了一个更通用的问题:通常是否可以指定其中一个目录名称可变的路径?
假设我想用命令执行一个文件。可执行文件位于 中/dir1/dir2/dir3/
,但 的名称dir2
是可变的,尽管它始终包含dir3
(类似于VIDEO_TS
,它始终类似于/media/username/NAME-OF-DVD/VIDEO_TS/
whileNAME-OF-DVD
不同)。
如果我想使用命令执行该文件,我必须指定路径。可以使用这样的命令(使用其中一个目录名称可以是“通用”的路径)吗?
答案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-extend-globbing
答案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"