是否可以指定目录名称可变的路径?

是否可以指定目录名称可变的路径?

询问关于 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之一,那么您可以引用为dirXdirYdirZ/dir1/dirX/dir3/dir4/dir1/*/dir3/dir4

不过,在您的情况下mpv /media/username/*/VIDEO_TS应该可以工作,因为 DVD 标题通常包含空格,所以我建议将整个路径放在双引号之间,例如"/media/username/*/VIDEO_TS"

相关内容