Почему grep не работает правильно
Это не работает, потому что вы должны сказать grep что .* - это фактический шаблон, который вы ищете.
grep '.*' -c list3
Если вы не используете одинарные кавычки, ваша оболочка расширится .* До имен каждого файла в вашем каталоге. Это называется расширением имени файла. Например, a.txt b.txt , поэтому grep увидит:
grep a.txt b.txt -c list3
Поскольку одинарные кавычки не позволяют расширению произойти, это путь сюда.
Где ваша команда grep неверна:
Кстати, вы идете в неправильном направлении с узором здесь. Период . в регулярном выражении соответствует любой символ, а не буквальная точка. Смотрите man страницу для получения дополнительной информации. Итак, ваше регулярное выражение в настоящее время говорит: «найти любой символ, а затем последовательность любого символа». Совершенно излишним.
Если вы действительно хотите соответствовать:
[точка] [что-нибудь еще]
... вам нужно уйти от точки:
\.*
Где ваша команда find может быть улучшена:
Я не знаю, что вы имеете в виду, чтобы избавиться от
\( ! -iname ".*" \)
Ваша команда find префикс любого файла с точкой для текущего рабочего каталога, поэтому вы ничего не удалите здесь. Вы могли бы просто запустить:
find . -maxdepth 1 -type f