J'ai un script shell qui permet find -print0
d'enregistrer une liste de fichiers à traiter dans un fichier temporaire. Dans le cadre de la journalisation, j'aimerais afficher le nombre de fichiers trouvés, et j'ai donc besoin d'un moyen pour obtenir ce nombre. Si l' -print0
option n'était pas utilisée pour des raisons de sécurité, je pourrais utiliser wc -l
pour obtenir le décompte.
8
head
ettail
sur une entrée délimitée par des valeurs nulles dans bash?Réponses:
Quelques options:
Notez que pour une entrée qui contient des données après le dernier caractère NUL (ou une entrée non vide sans caractère NUL), les
tr
approches compteront toujours le nombre de caractères NUL, mais les approchesawk
/sed
/grep
compteront un enregistrement supplémentaire pour ces octets supplémentaires .la source
head -c 5G /dev/urandom > f
). Résultats: grep 1,7s (idem pourgrep -Fcz ''
) • tr + wc-c 7,7s • tr + wc-l 7,4s • sed 34,7s • awk 1m11,7sawk
, vous voudrez définir les paramètres régionaux surC
(ou ceux qui n'utilisent pas de caractères multi-octets),LC_ALL=C awk ... < f
LC_ALL=C
sursort
où il n'a pas accélérer les choses, donc Heureusement , je suis encore avoir le fichier avant:LC_ALL=C awk ...
prend 6.7s.La meilleure méthode à laquelle j'ai pu penser est d'utiliser
grep -zc '.*'
. Cela fonctionne, mais il ne convient pas d'utiliser grep avec un motif qui correspondra à tout.la source
Avec
perl
:ou:
ou:
la source
wc -l
) comme une note (comme on peut le souhaiter).