Gibt es eine Möglichkeit, zu verhindern, dass und find
in ihren Ergebnissen ls -l
aufgelistet werden ? Mir ist es egal, ob dieses Ergebnis in der Ausgabe angezeigt wird, und es hindert mich daran, ihre Ausgabe effektiv an weiterzuleiten, um die Dinge genau zu zählen..
..
wc -l
Falls es wichtig ist, ich arbeite in zsh
.
Antwort1
ls
Verwenden Sie für -A
anstelle von -a
.
aus man ls
:
-A, --almost-all
do not list implied . and ..
Antwort2
Mit zsh
:
count() echo $#
count * # non-hidden files (all types)
count *(D) # files (all types)
count **/*(D) # files recursively (all types)
count **/*(D/) # directories only (recursively)
( zsh
Globs schließen niemals . ein .
, auch ..
nicht wenn . dotglob
aktiviert ist (wie beim (D)
Globbing-Qualifizierer)).
Um eine Fehlermeldung zu vermeiden, wenn keine Datei vorhanden ist, fügen Sie den N
Globbing-Qualifizierer hinzu:
count *(ND)
Dies führt dazu, dass der Glob auf nichts erweitert wird (kein Argument, kein leeres Argument), wenn keine Übereinstimmung vorhanden ist.
Beachten Sie, dass das Zeilenumbruchzeichen ein genauso gültiges Zeichen wie jedes andere Zeichen in einem Dateinamen ist. Daher ist die Weiterleitung der Ausgabe von ls
oder find
an wc -l
nicht korrekt.
POSIX: Sie könnten die /
Zeichen anstelle der Zeilenumbruchzeichen zählen:
find . ! -name . -prune -print | grep -c /
Oder rekursiv mit diesem Trick:
find .//. ! -name . -prune -print | grep -c //
Antwort3
Um find
die Punktverzeichnisse auszuschließen, können Sie Folgendes verwenden:
$ find . ! -path . -type d
Beispiel
$ find . ! -path . -type d | head -5
./.vim_SO
./.vim_SO/bundle
./.vim_SO/bundle/vim-fugitive
./.vim_SO/bundle/vim-fugitive/plugin
./.vim_SO/bundle/vim-fugitive/doc
...