Вопрос или проблема
Я пытаюсь использовать find
, чтобы найти файлы…
- которые скрыты с помощью
chflags
, например,chflags hidden my_file
- или имена файлов которых начинаются с точки, например,
.my_file
- и игнорировать специфичные для macOS файлы
.DS_Store
Текущая версия выглядит так
find . -mindepth 1 -maxdepth 1 -name '.*' -not -name '.DS_Store' -o -flags -hidden
Но это не исключает файлы .DS_Store
. Как это исправить?
Переместите и сгруппируйте ваши предикаты:
find . -mindepth 1 -maxdepth 1 ! -name .DS_Store \( -name '.*' -o -flags -hidden \)
Ваша оригинальная команда,
find . -mindepth 1 -maxdepth 1 -name '.*' ! -name .DS_Store -o -flags -hidden
… такая же как
find . -mindepth 1 -maxdepth 1 \( -name '.*' ! -name .DS_Store \) -o -flags -hidden
… и поскольку файлы .DS_Store
имеют флаг hidden
, они перечисляются.
Ответ или решение
Для поиска скрытых файлов в операционной системе macOS с помощью команды find
, одновременно исключая файлы .DS_Store
, необходимо учитывать правильную структуру логических условий в команде. Ваша изначальная команда имеет некоторые недостатки, которые могут привести к включению файлов, которые вы хотите исключить.
Проблема с изначальной командой
Команда, которую вы представили:
find . -mindepth 1 -maxdepth 1 -name '.*' -not -name '.DS_Store' -o -flags -hidden
включает в себя операцию -o
(или), которая может привести к тому, что система будет возвращать файлы с флагом "скрытый", включая .DS_Store
, даже когда вы пытаетесь их исключить.
Решение: Структура условий
Чтобы избежать этой проблемы, нужно перепорядочить и сгруппировать условия. Правильная команда будет выглядеть следующим образом:
find . -mindepth 1 -maxdepth 1 ! -name '.DS_Store' \( -name '.*' -o -flags hidden \)
Подробное объяснение:
-
-mindepth 1
и-maxdepth 1
: Эти параметры указывают на то, что мы ищем только в текущем каталоге, исключая родительский каталог. -
! -name '.DS_Store'
: Этот параметр используется для исключения файла.DS_Store
. Важно разместить его перед следующими условиями для того, чтобы гарантировать, что он правильно применяется ко всем найденным файлам. -
*`( -name ‘.‘ -o -flags hidden )
**: Эта группа условий позволяет находить файлы, которые либо имеют имена, начинающиеся с точки (что указывает на скрытые файлы), либо те, которые помечены как скрытые с помощью
chflags. Скобки
(и
)` группируют эти условия, чтобы гарантировать, что они обрабатываются вместе.
Результаты выполнения
Используя данную команду в терминале, вы получите список всех скрытых файлов (как с именами, начинающимися с точки, так и с флагом "hidden"), кроме файлов .DS_Store
. Это может быть полезно для администраторов систем и разработчиков, которые работают с macOS и хотят эффективно управлять файлами.
Заключение
Правильно структурированная команда find
является мощным инструментом для поиска и управления файлами в macOS. Следуя вышеприведенным рекомендациям, вы сможете легко находить скрытые файлы и избегать ненужных результатов.