Ich verwende derzeit keinen Linux-Rechner. Würde der folgende Befehl das gewünschte Ergebnis erzielen?
ls | grep ".pdf" | wc
Antwort1
Nein, „.pdf“ entspricht viel zu vielen Ausdrücken, z. B. foo.pdfa
und bpdf
.
wc
Außerdem gibt „ohne Optionen“ auch dann die Anzahl der Zeilen, Wörter und Bytes in der Eingabe aus, wenn Sie keine falsch übereinstimmenden Dateien haben , sodass Sie zwei Zahlen mehr erhalten würden, als Sie interessieren. Wenn Sie grep
mitmischen möchten, können Sie dies tun ls | grep -E "\.pdf$" | wc -l
, aber solange Sie in diesem Verzeichnis nicht viele PDF-Dateien haben, wird grep nicht benötigt. In diesem Fall können Sie mit auskommen ls *.pdf | wc -l
.
Später hinzugefügt, als ich darüber nachdenken konnte:
Sie können auch grep
das Zählen durchführen, sodass, wenn grep
mit von der Partie ist, einfach die -c
Option zum Grep-Vorgang hinzugefügt wird, anstatt die Ausgabe an weiterzuleiten wc -l
. ls | grep -cE "\.pdf$"
Wenn Sie also das Zählen von Verzeichnissen mit dem Namen vermeiden möchten <something.pdf>
: ls -l | grep -cE "^-.*\.pdf$"
.
Antwort2
Du solltest benutzen
ls | grep ".pdf" | wc -l
Der -l
Parameter zählt nur die Anzahl der resultierenden Zeilen, während -l
Sie ohne ihn auch andere Werte erhalten würden, wie Zeilenumbruch, Wort- und Byteanzahl. Beachten Sie, dass hiermit Dateinamen (und auch Ordner) gezählt werden, die die Zeichenfolge „.pdf“ enthalten.
Um nur Dateien zu zählen, die mit enden .pdf
, verwenden Sie besser find
:
find . -type f -name "*.pdf" | wc -l
Antwort3
Ihre Shell sollte die Filterung durchführen können:
ls *.pdf | wc -l
oder Sie müssen sicherstellen, dass das Ende der Dateinamen übereinstimmt:
ls | grep "*\.pdf$" | wc -l
(Beachten Sie das Dollarzeichen).
Hinweis: Beides passt auchVerzeichnissedie Endung „.pdf“, falls vorhanden.
Hinweis 2: ls
sollte sich so verhalten, als ob Sie ihm eine Option gegeben hätten, -1
sobald Sie seine Ausgabe weiterleiten. Andernfalls fügen Sie diesen Schalter hinzu.