varios una todos subdirectorios recursivo recursiva por los listar fecha directorios comando carpeta busqueda buscar borrar archivos linux bash find

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