Ich möchte die Gesamtanzahl der Zeilen in allen /etc
Dateien zählen, aber nicht die Dateien in den Unterverzeichnissen. Deshalb habe ich Folgendes eingegeben: wc -l /etc/* | tail -1
und die Ausgabe sieht folgendermaßen aus:
xxxx is a directory
yyyy is a directory
total 1752
Meine Frage ist, wie ich diese Kommentare entfernen (löschen) kann und gibt es eine bessere Möglichkeit, diese Art der Zählung durchzuführen?
Antworten:
Sie können die Fehlermeldungen nach / dev / null ausgeben
Mit diesem Befehl sehen Sie nur die Anzahl der Zeilen in den Dateien, die weltweit lesbar sind. Um die Anzahl der Zeilen aller Dateien zu sehen, müssten Sie den Befehl mit erhöhen
sudo
.quelle
Isolieren Sie Dateien und führen Sie wc auf ihnen aus
Was
wc -l /etc/*
tut , ist , dass*
für alle Elemente innerhalb erweitern/etc/
Verzeichnis. Ziel ist es also, Dateien zu isolieren und zu bearbeitenwc
. Es gibt verschiedene Möglichkeiten, dies zu tun.for Schleife mit Test
Der
test
Befehl, oder häufiger abgekürzt als,[
kann verwendet werden, um festzustellen, ob ein Element eine reguläre Datei ist:Wir können also alle Elemente in iterieren und nur
/etc/
ausführen,wc
wenn der obige Befehl true zurückgibt. Wie so:finden
Wir können auch verwenden ,
find
mit-maxdepth
,-type
und-exec
Fahnenfind /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepth
Informiert Sie darüber, wie tief die Verzeichnisstruktur noch reicht. Der Wert 1 bedeutet nur die Dateien im gewünschten Verzeichnis.-type f
-o
Weist es an, nach regulären Dateien zu suchen, ODER (dargestellt durch Flag) nach sybolischen Links (dargestellt durchtype l
). All diese Güte ist in Klammern eingeschlossen,()
die mit einem\
Escapezeichen versehen sind, damit die Shell sie als Teil von to interpretiertfind
Befehls , und nicht als etwas anderes.-exec COMMAND {} +
Die Struktur hier führt den Befehl aus, den wir ihm geben,+
und gibt an, dass alle gefundenen Dateien als Befehlszeilenargumente für den Befehl gespeichert werden sollen.Um insgesamt zu produzieren, konnten wir die Ausgabe nach
tail
Belieben leitenRandnotiz
Es ist einfacher, es einfach zu verwenden
wc -l /etc/* 2>/dev/null | tail -1
, wie in der Antwort von LD James,find
sollte jedoch Teil der Gewohnheit sein, mit Dateien umzugehen, um die Verarbeitung schwieriger Dateinamen zu vermeiden. Für weitere Informationen lesen Sie den Aufsatz Wie man richtig mit Dateinamen umgehtquelle
find
macht das einfach:Ausgabe:
ABER wenn du nur die Nummer als Ausgabe haben willst und sonst nichts:
BEARBEITEN :
newlines
Fehler kos sagte vorherrscht. Nur mit-exec
korrigiert es. Enthält/etc
auch keine solchen Dateien.Ausgabe:
Wie von kos gezeigt , kann der obige Befehl auf Folgendes reduziert werden:
BEARBEITEN :
newlines
Fehler kos sagte vorherrscht. Nur mit-exec
korrigiert es. Enthält/etc
auch keine solchen Dateien.Ausgabe:
quelle
-iname '*'
? stimmt nichtfind
alles standardmäßig überein?'*'
.Verwenden Sie z-shell (
zsh
), die Königin der Muscheln , anstatt bash.quelle