Игнорировать / удалять скрытые каталоги командой GNU find - PullRequest
11 голосов
/ 01 февраля 2010

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

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

но это совсем не будет соответствовать:

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

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

Ответы [ 2 ]

8 голосов
/ 01 февраля 2010

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

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

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

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

1 голос
/ 01 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...