
Dies sollte eine relativ einfache Frage sein. Ich versuche, mehrere Dateien in einer Schleife durch ein ausführbares Programm zu leiten. Ich habe mehrere Strategien ausprobiert (Speichern in einem Array usw.), aber der Dateiname scheint nicht als Variable erkannt zu werden. Der Fehler, den ich erhalte, ist: Keine solche Datei oder kein solches Verzeichnis.
Der Umriss meines letzten Versuchs:
FILES=path/*/*
for f in $FILES
do
./function -input $f
done
Ich arbeite in einer Bash-Shell.
Antwort1
Anstatt eine einfache Variable zum Speichern einer Glob-Erweiterungssequenz zu verwenden, empfehlen wir die Verwendung eines richtigen Arrays und die Aktivierung der Shell-Globbing-Option, globstar
um Dateien in allen Unterverzeichnissen zu füllen
shopt -s globstar nullglob
file_list=(path/**/*)
und verwenden Sie eine Schleife über das Array, um jede Datei zu verarbeiten
for file in "${file_list[@]}"; do
printf '%s\n' "$file"
# Your other actions on file goes here
done