Y at-il un moyen d'empêcher la find
et ls -l
de la list .
et ..
dans leurs résultats? Je ne me soucie jamais de voir ce résultat dans la sortie, et cela m'empêche de canaliser efficacement leur sortie vers wc -l
pour countr les choses avec précision.
Au cas où cela count, je travaille dans zsh
.
Avec 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
dotglob
jamais .
ni ..
même quand dotglob
est activé (comme avec le qualificatif de dotglob
(D)
)).
Pour éviter un message d'erreur lorsqu'il n'y a pas de file, ajoutez le qualificatif N
globbing:
count *(ND)
Cela provoque l'expansion du glob à rien (pas d'argument, pas un argument vide) s'il n'y a pas de correspondance.
Notez que puisque le caractère newline est aussi valide que n'importe quel caractère dans un nom de file, la sortie de ls
ou la find
dans wc -l
n'est pas correcte.
POSIXly, vous pouvez countr les /
caractères à la place des caractères newline:
find . ! -name . -prune -print | grep -c /
Ou récursivement, en utilisant cette astuce:
find .//. ! -name . -prune -print | grep -c //
Pour ls
, utilisez -A
au lieu de -a
.
de l' man ls
:
-A, --almost-all do not list implied . and ..
Pour find find
pour exclure les directorys de point, vous pouvez utiliser ceci:
$ find . ! -path . -type d
$ 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 ...