Ich möchte nur alle Dateien in einem bestimmten Verzeichnis in ein Bash-Array bringen (vorausgesetzt, keine der Dateien enthält eine neue Zeile im Namen):
Damit:
myarr=()
find . -maxdepth 1 -name "mysqldump*" | mapfile -t myarr; echo "${myarr[@]}"
Leeres Ergebnis!
Wenn ich auf Umwegen eine Datei verwende, vorübergehend oder auf andere Weise:
myarr=()
find . -maxdepth 1 -name "mysqldump*" > X
mapfile -t myarray < X
echo "${myarray[@]}"
Ergebnis!
Aber warum mapfile
liest man nicht richtig aus einer Pfeife?
find
und mapfile
hier überhaupt und nicht nur einfach myarr=(mysqldump*)
? Dies funktioniert sogar mit Dateinamen mit Leerzeichen und Zeilenumbrüchen.
nullglob
Option on ( shopt -s nullglob
) aktivieren muss, um myarr=(mysqldump*)
nicht mit dem Array zu enden, ('mysqldump*')
falls keine Dateien übereinstimmen.