Игнорируйте/сокращайте скрытые каталоги с GNU, находят команду

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

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

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

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

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

11
задан kostmo 11 February 2010 в 04:30
поделиться

2 ответа

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

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

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

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

8
ответ дан 3 December 2019 в 10:26
поделиться

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

1
ответ дан 3 December 2019 в 10:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: