Zählen bestimmter Dateien im Verzeichnis

Zählen bestimmter Dateien im Verzeichnis

Nehmen wir an, ich muss alle Dateien im Verzeichnis zählen, die mit o enden (zum Beispiel ab12.14o, 70010340.09o). Welchen Befehl muss ich verwenden?

Ich habe es versucht ls *.o | wc, aber es funktioniert nicht.

Antwort1

Sie müssen wahrscheinlich nur das aus Ihrem Glob-Ausdruck entfernen ., da es nur auf Dateien mit der Endung hinweist und .onicht aufo

Besser wäre jedoch die Verwendung von find:

find . -maxdepth 1 -name '*o' -printf 'x' | wc -c

Sie können -type fes durch Hinzufügen auf einfache Dateien beschränken (Verzeichnisse ausschließen) und entfernen, -maxdepth 1wenn Sie rekursiv zählen möchten.

Antwort2

Nicht verwenden ls.

Verwenden Sie ein Shell-Array, um die Namen der Dateien mit der Endung : zu speichern o:

files=( *o )

Mach jetzt:

echo "${#files[@]}"

um die Anzahl der Dateien zu erhalten.

@steeldriver hat einen guten Punkt angesprochen: Wenn Sie keine übereinstimmenden Dateinamen haben, wird das Glob-Muster wörtlich genommen. Aus diesem Grund erhalten Sie die Dateianzahl trotzdem als 1, auch wenn es keine übereinstimmenden Dateinamen gibt.

Um dies zu umgehen, legen Sie die Shell-Option nullglob„oder“ fest failglob:

shopt -s nullglob
shopt -s failglob

verwandte Informationen