Опция “-f” в find для NetBSD

Вопрос или проблема

Я не могу понять, что означает опция “-f” в команде find на NetBSD.

Справка: https://man.netbsd.org/find.1 говорит

-f Определяет иерархию файлов, по которой будет производиться обход. Иерархии файлов также могут быть указаны как операнды, сразу следующие за опциями.

Использование:

find [-H | -L | -P] [-dEhsXx] -f файл [файл …] [выражение]

find [-H | -L | -P] [-dEhsXx] файл [файл …] [выражение]

Я ожидал, что два следующих вызова будут эквивалентны:

home# find ./ -name "*c"
./1.c
home# find -f ./ -name "*c"
find: неведомая опция -- n
find: неведомая опция -- a
find: неведомая опция -- m
find: неведомая опция -- e
./
./1.c
find: *c: Нет такого файла или каталога

Чтобы сделать второй вызов эквивалентным, мне нужно выполнить

home# find -f ./ -- -name "*c"
./1.c

Я что-то упускаю?

Ответ или решение

Опция "-f" в команде find на NetBSD может вызывать недоумение у пользователей, особенно в свете вашего опыта с командой и различиями в синтаксисе. Давайте рассмотрим, что она означает, и почему вы столкнулись с проблемами в использовании.

Понимание опции "-f"

Согласно документации, опция "-f" указывает find, какую файловую иерархию следует обходить. Эта опция необходима для явного указания каталога или файла, который будет использоваться в качестве начальной точки для поиска.

Синтаксис команды

Ваша команда find, которая выглядит как find -f ./ -name "*c", имеет правильный синтаксис, но здесь происходит путаница с тем, как обрабатываются аргументы и параметры в командной строке. Ваши тесты показывают, что команда не распознает фильтр поиска ("-name "*c"") как ожидается.

Пример использования

Чтобы правильно использовать опцию "-f", необходимо понимать, как интерпретируются последующие аргументы. Как вы заметили, при выполнении:

find -f ./ -name "*c"

возникает ошибка, поскольку find не распознает часть -name "*c" как допустимые аргументы для поиска. Вместо этого команда ожидает списка файлов или иерархий сразу после опции -f.

В таком случае, правильным образом передать параметры поиска будет использование двойного дефиса --, который сигнализирует find о том, что дальнейшие аргументы не интерпретируются как опции. Таким образом, команда, которую вы привели, становится правильной:

find -f ./ -- -name "*c"

Это говорит программе: "начни с этой директории и интерпретируй все что идет после ‘–‘ как обычные аргументы поиска".

Зачем это нужно

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

Заключение

Ваш случай является ярким примером того, как важно обращать внимание на синтаксис и порядок аргументов при работе с командами в Unix-подобных системах. Надеюсь, что данная информация помогла прояснить значение опции "-f" в команде find на NetBSD. Если у вас есть дополнительные вопросы или сомнения, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...