Исключение . и .. из результатов поиска и ls

Исключение . и .. из результатов поиска и ls

Есть ли способ запретить findи ls -lперечислять .и ..в их результатах? Мне никогда не интересно видеть этот результат в выводе, и это мешает мне эффективно передавать их вывод для wc -lточного подсчета вещей.

Если это имеет значение, я работаю в zsh.

решение1

Для lsиспользуйте -Aвместо -a.

от man ls:

   -A, --almost-all
          do not list implied . and ..

решение2

С 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они включены (как в случае с (D)квалификатором подстановки)).

Чтобы избежать сообщения об ошибке при отсутствии файла, добавьте Nквалификатор глобализации:

count *(ND)

Это приводит к тому, что шар расширяется до нуля (нет аргумента, не пустой аргумент), если совпадений нет.

Обратите внимание, что поскольку символ новой строки является таким же допустимым символом в имени файла, передача выходных данных lsили findв wc -lневерна.

Используя POSIX, можно подсчитать /символы вместо символов новой строки:

find . ! -name . -prune -print | grep -c /

Или рекурсивно, используя этот трюк:

find .//. ! -name . -prune -print | grep -c //

решение3

Чтобы findисключить точечные каталоги, можно использовать это:

$ 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
...

Связанный контент