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 .o
nicht aufo
Besser wäre jedoch die Verwendung von find
:
find . -maxdepth 1 -name '*o' -printf 'x' | wc -c
Sie können -type f
es durch Hinzufügen auf einfache Dateien beschränken (Verzeichnisse ausschließen) und entfernen, -maxdepth 1
wenn 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