Ich habe ein Shell-Skript, mit find -print0
dem eine Liste der zu verarbeitenden Dateien in einer temporären Datei gespeichert wird. Im Rahmen der Protokollierung möchte ich die Anzahl der gefundenen Dateien ausgeben. Daher benötige ich einen Weg, um diese Anzahl zu ermitteln. Wenn die -print0
Option nicht aus Sicherheitsgründen verwendet würde, könnte ich sie verwenden wc -l
, um die Zählung zu erhalten.
shell-script
qqx
quelle
quelle
head
undtail
bei nullbegrenzten Eingaben in Bash?Antworten:
Einige Optionen:
Beachten Sie, dass für einen Eingang, die Daten nach den letzten NUL - Zeichen (oder nicht-leere Eingabe ohne NUL - Zeichen) enthält, die
tr
werden Ansätze immer die Anzahl der NUL - Zeichen zählen, aber dieawk
/sed
/grep
Ansätze werden eine zusätzliche Aufzeichnung für diese zusätzlichen Bytes zählen .quelle
head -c 5G /dev/urandom > f
). Ergebnisse: grep 1.7s (gleich fürgrep -Fcz ''
) • tr + wc-c 7.7s • tr + wc-l 7.4s • sed 34.7s • awk 1m11.7sawk
möchten Sie das Gebietsschema aufC
(oder ein beliebiges, das keine Multibyte-Zeichen verwendet) festlegenLC_ALL=C awk ... < f
LC_ALL=C
auf ,sort
wo es hat nicht die Dinge beschleunigen, deshalb Zum Glück habe ich noch die Datei haben aus der Zeit vor:LC_ALL=C awk ...
nimmt 6.7s.Die beste Methode, an die ich denken konnte, ist die Verwendung
grep -zc '.*'
. Dies funktioniert, aber es fühlt sich falsch an, grep mit einem Muster zu verwenden, das zu allem passt.quelle
Mit
perl
:oder:
oder:
quelle
wc -l
) als Notiz (wie gewünscht) gezählt wird.