find . -print0
Verwendung scheint der einzig sichere Weg zu erhalten, eine Liste von Dateien in bash zu sein aufgrund der Möglichkeit von Dateinamen mit Leerzeichen, Zeilenumbrüchen, Anführungszeichen usw.Erfassung der Ausgabe von find. -print0 in eine bash Array
Aber ich habe Eine harte Zeit, die tatsächlich die Ausgabe von find innerhalb von bash oder mit anderen Befehlszeilenprogrammen nützlich macht. Die einzige Art, wie ich es geschafft haben, die Verwendung der Ausgabe zu machen, ist durch kochend es Perl und das Ändern von Perl IFS auf null:
find . -print0 | perl -e '$/="\0"; @files=<>; print $#files;'
Dieses Beispiel gibt die Anzahl der Dateien gefunden, die Vermeidung der Gefahr von Zeilenumbrüchen in Dateinamen korrumpieren der Graf, wie es auftreten würde mit:
find . | wc -l
da die meisten Kommandozeilenprogramme, nicht null-separierte Eingang stützen ich das beste, was herauszufinden, die Ausgabe von find . -print0
in einem bash-Array zu erfassen wäre, wie ich es getan habe im Perl-Snippet oben, und dann mit der Aufgabe fortfahren, was auch immer es sein mag.
Wie kann ich das tun?
funktioniert das nicht:
find . -print0 | (IFS=$'\0' ; array=($(cat)) ; echo ${#array[@]})
Eine viel allgemeinere Frage sein könnte: Wie kann ich mit Listen von Dateien in bash nützliche Dinge tun?
Was meinen Sie durch nützliche Dinge zu tun? –
Oh, weißt du, die üblichen Dinge Arrays sind nützlich für: ihre Größe herauszufinden; Iterieren über ihren Inhalt; sie rückwärts ausdrucken; sortiert sie. Derartiges. Es gibt eine Fülle von Dienstprogrammen in Unix, um diese Dinge mit Daten zu tun: wc, bash's for-Schleifen, tac und sort; Aber all das scheint nutzlos, wenn es um Listen geht, die Leerzeichen oder Zeilenumbrüche enthalten können. I.e. Dateinamen. Piping Daten mit null Wert Eingabefeld-Trennzeichen scheint die Lösung zu sein, aber sehr wenige Dienstprogramme können damit umgehen. – Idris
Hier ist ein Essay über die korrekte Handhabung von Dateinamen in der Shell, mit vielen Besonderheiten: [http://www.dwheeler.com/essays/filenames-in-shell.html](http://www.dwheeler.com/ essays/filenames-in-shell.html) –