Команды chown и chmod имеют одну неприятную особенность: в своем стандартном синтаксисе они не обрабатывают (т. е. пропускают) скрытые файлы и каталоги. В Linux скрытые файлы и каталоги имеют в начале своего имени точку, и иногда называются dot-файлами (или dot-каталогами в случае каталогов).
Такое поведение особенно неприятно в том случае, если происходит рекурсивная обработка файлов с помощью опции -R.
Вопрос: как же обрабатывать скрытые файлы через команды chown/chmod так, чтобы затрагивались и скрытые файлы? Например, иногда надо поменять владельца или режим файлов для всех подкаталогов проекта и подкаталога .git, если проект находится под управлением системы контроля версий Git. Немало споров было по этому поводу, но самый правильный способ, без "краевых" эффектов - это воспользоваться командой find, из-под которой выполнить команду смены пользователя или команду смены режима доступа к файлу.
В общем случае, делается это так:
find . -exec chown user:group {} \;
find . -exec chmod 644 {} \;
и т. п.
Команда find, в отличие от chown/chmod, находит все файлы в указанном каталоге (символ точка "." в команде - это текущий каталог), невзирая на то, скрытый это файл или нет. Команда find ищет файлы в указанном каталоге рекурсивно, заходя во все подкаталоги.
С помощью опции -exec к каждому найденному файлу применяется команда, идущая после данной опции. Вместо символов "{}" будет подставляться имя текущего найденного файла с путем к нему. Символы "\;" нужны для того, чтобы в опции -exec обозначить конец выполняемой внутри нее команды.