bash - Was ist der beste Weg, um zu zählen find-Ergebnisse?
Meine aktuelle Lösung wäre find <expr> -exec printf '.' \; | wc -c
, aber das dauert viel zu lange, wenn es mehr als 10000 Ergebnisse. Gibt es keinen schnelleren/besseren Weg, dies zu tun?
- verwenden Sie wc -l auf Ihre Ergebnisse finden
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies statt (erfordern
find
's-printf
support):Es ist zuverlässiger und schneller als das zählen der Zeilen.
Hinweis, dass ich die
find
'sprintf
, nicht ein externer Befehl.Let ' s bench ein bisschen :
Mein snippet benchmark :
Mit vollen Linien :
Also meine Lösung ist schneller =) (der wichtige Teil ist die
real
Linie)-printf '.'
Warum nicht
als eine einfache tragbare Lösung ? Deine ursprüngliche Lösung ist erzeugt einen neuen Prozess
printf
für jede einzelne Datei gefunden, und das ist sehr teuer (wie du gerade gefunden habe).Beachten Sie, dass dies overcount, wenn Sie Dateinamen mit Zeilenumbrüchen eingebettet, aber wenn Sie das haben, dann habe ich vermute, Ihre Probleme zu laufen ein wenig tiefer 🙂
Diese Lösung ist sicherlich langsamer als einige der anderen
find -> wc
Lösungen hier, aber wenn Sie waren geneigt, etwas anderes zu tun, mit dem Datei-Namen zusätzlich zu zählen, könnte manread
von derfind
Ausgabe.Es ist nur eine änderung eine Lösung gefunden in BashGuide richtig verarbeitet Dateien mit nicht standardmäßigen Namen, indem Sie die
find
output-delimiter ein NUL-byte mitprint0
und Lesen mit''
(NUL-byte), da die Schleife Trennzeichen.Dies ist mein
countfiles
Funktion in meinem~/.bashrc
(es ist Recht schnell, sollten für Linux & FreeBSDfind
, und nicht täuschen lassen durch die Datei-Pfade mit neue-Zeile-Zeichen; die Letztewc
gilt nur NUL-bytes):