Ist es möglich, einen Pfad anzugeben, bei dem der Verzeichnisname variabel ist?

Ist es möglich, einen Pfad anzugeben, bei dem der Verzeichnisname variabel ist?

FragenDasFrage zu MPV-Player und DVDs. Ich bin über eine allgemeinere Frage gestolpert: Ist es generell möglich, einen Pfad anzugeben, bei dem einer der Verzeichnisnamen variabel ist?

Angenommen, ich möchte eine Datei mit einem Befehl ausführen. Die ausführbare Datei befindet sich in /dir1/dir2/dir3/, aber der Name von dir2ist variabel, obwohl er immer enthalten wird dir3(ähnlich wie VIDEO_TS, was immer ähnlich ist wie , /media/username/NAME-OF-DVD/VIDEO_TS/während NAME-OF-DVDvariiert).

Wenn ich die Datei mit einem Befehl ausführen möchte, muss ich den Pfad angeben. Kann ein solcher Befehl verwendet werden (mit einem Pfad, in dem ein Verzeichnisname „generisch“ sein kann)?

Antwort1

Bash kann Globbing verwenden. Mit Globbing können Sie ein Muster angeben, das mehreren Werten entspricht. Es funktioniert ähnlich wie REGEX, aber es ist wichtig zu beachten, dass es sich nicht um dasselbe handelt.

  • *(pattern)stimmt 0 oder mehr Mal mit einem Muster überein
  • ?(pattern)stimmt 0 oder 1 Mal mit einem Muster überein
  • +(pattern)stimmt 1 oder mehr Mal mit einem Muster überein
  • [ ]kann mit einem darin enthaltenen Wert übereinstimmen, einschließlich [a-z]für a bis z
  • ( | )kann Werte auf beiden Seiten der Pipe abgleichen

Wenn Sie kein Muster eingeben, fungiert das Muster als Platzhalter.

Ein Pfad /dir1/dir2/dir3/kann also wie folgt dargestellt werden:

  • /dir1/*/dir3/
  • /dir1/dir*/dir3/
  • /dir1/*(dir2|otherdir)/dir3/
  • /dir1/dir*[1-99]/dir3/

Weitere Informationen finden Sie unter diesem Link:http://mywiki.wooledge.org/glob

oder dieses:http://www.linuxjournal.com/content/bash-extended-globbing

Antwort2

solange die variierende Verzeichnisebene ein einzelnes Verzeichnis ist, was ich damit meine, wenn Sie haben /dir1/dirX/dir3/dir4und der dirXTeil sich nicht ändert wie dirX/dirY/dirZ, aber nur einer der sein kann dirX, dirYoder dirZ, dann können Sie verweisen /dir1/dirX/dir3/dir4als/dir1/*/dir3/dir4

In Ihrem Fall mpv /media/username/*/VIDEO_TSsollte das funktionieren. Da die DVD-Titel jedoch normalerweise Leerzeichen enthalten, schlage ich vor, den gesamten Pfad in Anführungszeichen zu setzen, z. B."/media/username/*/VIDEO_TS"

verwandte Informationen