Игнорировать/обрезать скрытые каталоги командой GNU find

При использовании команды find, почему следующее будет успешно игнорировать скрытые каталоги (те, которые начинаются с периода), при совпадении всего остального:

find . -not \( -type d -name ".?*" -prune \)

но это ничего не будет соответствовать:

find . -not \( -type d -name ".*" -prune \)

Единственное отличие - знак вопроса. Должна ли последняя команда также обнаруживать и исключать каталоги, начинающиеся с периода?

Ответ 1

Последняя команда вырезает все, потому что чернослив . - попробуйте, чтобы увидеть разницу:

$ ls -lad .*
.
..
.dotdir
$ ls -lad .?*
..
.dotdir

Вы видите, что во втором, . не включается, потому что это только один символ. Глобус ".?*" содержит только имена файлов длиной не менее двух символов (точка плюс любой отдельный символ, необязательно, плюс любая последовательность из нуля или более символов).

Кстати, find не является командой Bash.

Ответ 2

Последняя команда prunes . сама - каталог, в котором вы работаете find, и поэтому он не генерирует никаких результатов.