Gibt es eine Möglichkeit, die Anzahl der Zeilen einer Befehlsausgabe herauszufinden?

Gibt es eine Möglichkeit, die Anzahl der Zeilen einer Befehlsausgabe herauszufinden?

Ich versuche, die Befehlsausgaben zwischen zwei Servern zu vergleichen. Ich möchte die Anzahl der Zeilen aus der Ausgabe von Befehlen wie herausfinden ls -l. Gibt es eine Möglichkeit, dies zu tun? Bisher habe ich nichts gefunden.

Antwort1

Für manche ist das vielleicht leichter zu merken:

ls -l | grep . -c

total 32044Bitte beachten Sie, dass sowohl grep als auch wc Hilfszeilen wie oder oder zählen ./dirname:. Um dies insbesondere bei rekursiver Ausgabe wie zu vermeiden, ls -lRversuchen Sie Folgendes:

find . -type f | grep . -c

wobei „first“ .der Verzeichnispfad ist und -type fbedeutet, dass findnur Dateien aufgelistet werden. Wenn Sie alle Typen benötigen (einschließlich Verzeichnisse, Sockets usw.), lassen Sie „first“ einfach weg -type f.

Bitte beachten: wc -lZählt leere Zeilen (nur „\n“), während grep . -c– dies NICHT tut.

Antwort2

Du solltest benutzen wc:

$ wc -l .emacs.d/init.el 
73 .emacs.d/init.el

Aus man wc:

NAME
       wc - print newline, word, and byte counts for each file

SYNOPSIS
       wc [OPTION]... [FILE]...
       wc [OPTION]... --files0-from=F
       ....
       -l, --lines
              print the newline counts

wcist Teil von GNU coreutils, Sie können es in den meisten Systemen haben Unix-like.

Antwort3

Sie können Ihren Befehl per Pipeline an den folgenden wcBefehl weiterleiten:

ls -l | wc -l

Antwort4

Wenn Sie die Anzahl der von den Servern verarbeiteten Dateien vergleichen möchten, können Sie dies zuverlässig wie folgt tun:

ls -aR1qp ./ | grep -cv '/\|^$'

Dadurch werden rekursiv alle Dateien (keine Verzeichnisse) aufgelistet, eine pro Zeile, auch .dotfilesunterhalb des aktuellen Verzeichnisses, wobei Shell-Globs verwendet werden, um nicht druckbare Zeichen zu ersetzen. grepFiltert alle übergeordneten Verzeichnislisten oder Leerzeilen heraus .., */sodass pro Datei nur eine Zeile vorhanden sein sollte, deren Gesamtzahl grepan Sie zurückgegeben wird. Wenn Sie auch untergeordnete Verzeichnisse einschließen möchten, gehen Sie folgendermaßen vor:

ls -aR1qp ./ | grep -cv '^\.\{1,2\}/\|^$'

oder...

ls -AR1q ./ | grep -cv '/\|^$'

Beachten Sie, dass es sich bei der -AOption lsab der neuesten Version um POSIX handelt.

verwandte Informationen