linux - todos - “Buscar: las rutas deben preceder a la expresión:” ¿Cómo especifico una búsqueda recursiva que también encuentra archivos en el directorio actual?
comando find linux recursivo (4)
Desde el manual de búsqueda:
NON-BUGS
Operator precedence surprises
The command find . -name afile -o -name bfile -print will never print
afile because this is actually equivalent to find . -name afile -o /(
-name bfile -a -print /). Remember that the precedence of -a is
higher than that of -o and when there is no operator specified
between tests, -a is assumed.
“paths must precede expression” error message
$ find . -name *.c -print
find: paths must precede expression
Usage: find [-H] [-L] [-P] [-Olevel] [-D ... [path...] [expression]
This happens because *.c has been expanded by the shell resulting in
find actually receiving a command line like this:
find . -name frcode.c locate.c word_io.c -print
That command is of course not going to work. Instead of doing things
this way, you should enclose the pattern in quotes or escape the
wildcard:
$ find . -name ''*.c'' -print
$ find . -name /*.c -print
Estoy teniendo dificultades para encontrar y encontrar coincidencias en el directorio actual, así como en sus subdirectorios.
Cuando ejecuto find *test.c
, solo me da las coincidencias en el directorio actual. (no busca en subdirectorios)
Si intento find . -name *test.c
find . -name *test.c
esperaría los mismos resultados, pero en cambio me da solo las coincidencias que están en un subdirectorio. Cuando hay archivos que deben coincidir en el directorio de trabajo, me da: find: paths must precede expression: mytest.c
¿Qué significa este error y cómo puedo obtener las coincidencias tanto del directorio actual como de sus subdirectorios?
Intenta ponerlo entre comillas:
find . -name ''*test.c''
Intente ponerlo entre comillas: se está ejecutando en la expansión de comodines del shell, por lo que lo que realmente está pasando para encontrar se verá así:
find . -name bobtest.c cattest.c snowtest.c
... causando el error de sintaxis. Así que prueba esto en su lugar:
find . -name ''*test.c''
Tenga en cuenta las comillas simples alrededor de la expresión de su archivo: estas detendrán el shell (bash) expandiendo sus comodines.
Lo que sucede es que el shell está expandiendo "* test.c" a una lista de archivos. Intenta escapar del asterisco como:
find . -name /*test.c