
尋ねるこれMPV プレーヤーと DVD に関する質問ですが、より一般的な質問に遭遇しました。ディレクトリ名の 1 つが可変であるパスを指定することは一般的に可能ですか?
コマンドを使用してファイルを実行するとします。実行ファイルは にあります/dir1/dir2/dir3/
が、 の名前dir2
は変数です。ただし、 には常に が含まれますdir3
( と同様でVIDEO_TS
、 は常に に似ていますが、/media/username/NAME-OF-DVD/VIDEO_TS/
はNAME-OF-DVD
異なります)。
コマンドを使用してそのファイルを実行する場合は、パスを指定する必要があります。そのようなコマンドは使用できますか (1 つのディレクトリ名が「汎用」である可能性があるパスを使用)?
答え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-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"