Die Verwendung find . -print0
scheint der einzig sichere Weg zu sein, um eine Liste der Dateien in Bash zu erhalten, da Dateinamen Leerzeichen, Zeilenumbrüche, Anführungszeichen usw. enthalten können.
Es fällt mir jedoch schwer, die Ausgabe von find innerhalb von Bash oder mit anderen Befehlszeilenprogrammen nützlich zu machen. Die einzige Möglichkeit, die Ausgabe zu nutzen, besteht darin, sie an Perl weiterzuleiten und das IFS von Perl in Null zu ändern:
find . -print0 | perl -e '$/="\0"; @files=<>; print $#files;'
In diesem Beispiel wird die Anzahl der gefundenen Dateien gedruckt, um die Gefahr zu vermeiden, dass Zeilenumbrüche in Dateinamen die Anzahl beschädigen, wie dies bei folgenden Fällen der Fall wäre:
find . | wc -l
Da die meisten Befehlszeilenprogramme keine durch Nullen getrennten Eingaben unterstützen, ist es meines Erachtens am besten, die Ausgabe find . -print0
in einem Bash-Array zu erfassen , wie ich es im obigen Perl-Snippet getan habe, und dann mit der Aufgabe fortzufahren, wie auch immer Sein.
Wie kann ich das machen?
Das funktioniert nicht:
find . -print0 | ( IFS=$'\0' ; array=( $( cat ) ) ; echo ${#array[@]} )
Eine viel allgemeinere Frage könnte sein: Wie kann ich nützliche Dinge mit Listen von Dateien in Bash tun?