Игнорировать/обрезать скрытые каталоги командой 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
, и поэтому он не генерирует никаких результатов.