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 32044
Bitte 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 -lR
versuchen Sie Folgendes:
find . -type f | grep . -c
wobei „first“ .
der Verzeichnispfad ist und -type f
bedeutet, dass find
nur Dateien aufgelistet werden. Wenn Sie alle Typen benötigen (einschließlich Verzeichnisse, Sockets usw.), lassen Sie „first“ einfach weg -type f
.
Bitte beachten: wc -l
Zä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
wc
ist 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 wc
Befehl 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 .dotfiles
unterhalb des aktuellen Verzeichnisses, wobei Shell-Globs verwendet werden, um nicht druckbare Zeichen zu ersetzen. grep
Filtert alle übergeordneten Verzeichnislisten oder Leerzeilen heraus ..
, */
sodass pro Datei nur eine Zeile vorhanden sein sollte, deren Gesamtzahl grep
an 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 -A
Option ls
ab der neuesten Version um POSIX handelt.