Ich versuche also, mithilfe eines interaktiven Skripts einen Dateibereich auszuwählen.
Das Endziel besteht darin, den read
Befehl zu verwenden, aber zur Demonstration habe ich hier die glob
Variable manuell zugewiesen
#!/bin/bash
shopt -s extglob
# read -rp "Please enter a globbing string:"$'\n' glob
# This will give me an error (See below)
glob=*2020_04_03_{06..18}.jpg
/bin/ls -la /mnt/drive1/images/*/*/${glob}
# While this will return the desired files
/bin/ls -la /mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg
Der Fehler lautet wie folgt:
Error /bin/ls: cannot access "/mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg": No such file or directory
Was also übersehe ich hier beim Zuweisen der glob
Variable oder beim Anhängen der glob
Variable an meinen Pfad?
Lösung:
Ich habe eine Lösung gefunden, bin mir aber nicht ganz sicher, warum.
bash <<EOF
/bin/ls -la /mnt/drive1/images/*/*/${glob}
EOF
wird mir das gewünschte Ergebnis liefern.
Antwort1
Sie können anstelle einer bloßen Variablen eine Array-Zuweisung verwenden.
shopt -s nullglob ##: just in case there is non match for the glob.
glob=(*2020_04_03_{06..18}.jpg) ##: This will expand the glob * and brace expansion.
/bin/ls -la /mnt/drive1/images/*/*/"${glob[@]}"
Das sollte für Ihren Beispielcode funktionieren.
Das Problem tritt auf, wenn Sie die Zahlen innerhalb der Klammererweiterung durch eine Variable ersetzen möchten, die von @kusalananda bezüglich der Erweiterungssequenz erwähnt wurde.
Fügen Sie die
failglob
Shell-Option hinzu, wenn Sie einen Fehler sehen möchten, und beenden Sie das Programm mit einem Wert ungleich Null, wenn kein passendes Muster vorhanden ist.