Não consigo entender o que significa a opção "-f" para encontrar comandos no NetBSD.
Manual: https://man.netbsd.org/find.1 diz
-f Especifica uma hierarquia de arquivos para find percorrer. Hierarquias de arquivos também podem ser especificadas como operandos imediatamente após as opções.
Uso:
encontrar [-H | -L | -P] [-dEhsXx] -f arquivo [arquivo ...] [expressão]
encontrar [-H | -L | -P] [-dEhsXx] arquivo [arquivo ...] [expressão]
Eu esperaria que as duas chamadas a seguir fossem equivalentes:
home# find ./ -name "*c"
./1.c
home# find -f ./ -name "*c"
find: unknown option -- n
find: unknown option -- a
find: unknown option -- m
find: unknown option -- e
./
./1.c
find: *c: No such file or directory
Em vez de fazer o segundo equivalente, tenho que correr
home# find -f ./ -- -name "*c"
./1.c
Estou esquecendo de alguma coisa?
O BSD
find
analisa os sinalizadores ([-H | -L | -P] [-dEhsXx] [-f file]
) comgetopt()
, e usa o primeiro argumento não opcional para separar os sinalizadores dos caminhos/expressões. Porque ele quer dar suporte a coisas comoele continua tentando analisar flags mesmo depois de ver
-f file
. Mas isso significa que se você alimentá-lo com-f A -name ...
, ele tentará analisar-name
como um flag e falhará. Como você descobriu,--
forçará o fim dos flags, mas o mesmo acontecerá com qualquer coisa que não comece com-
, por exemplo:Isto é sugerido pela página de manual :
Nota lateral: esta é a fonte da minha descoberta favorita sobre incompatibilidade entre BSD e GNU: