Tecnología · GUÍA PRÁCTICA
¿find dice “paths must precede expression”? Demuestra la expansión del shell antes de reescribir el comando
El error suele indicar que el shell o un contenedor cambió la lista de argumentos antes de que find la analizara; no demuestra que la ruta inicial esté mal. Captura el argv exacto, separa puntos de inicio y expresión, cita los patrones destinados a find y prueba cero, una y varias coincidencias antes de cualquier acción destructiva.

El mensaje significa que find no pudo mantener un límite claro entre los puntos de inicio recibidos y la expresión. Por sí solo no demuestra que el directorio anterior a -name sea incorrecto.
La evidencia más valiosa es el vector de argumentos exacto. Demuestra qué entregó el shell o contenedor, clasifica cada token y valida la corrección con cero, una y varias coincidencias antes de restaurar acciones que cambian archivos.
1. Conserva el comando exacto y el límite de argv
Registra shell, directorio de trabajo, versión de find, comando exacto, estado de salida y stderr. En una reproducción segura imprime cada argumento citado por separado; no copies secretos al registro ni reconstruyas con eval.
Un comando visualmente igual puede llegar distinto mediante shell interactivo, script, alias, variable o herramienta de compilación, por lo que el texto mostrado no basta.
2. Reproduce cero, una y varias coincidencias
Prueba el mismo patrón en un directorio inofensivo. Un *.txt sin comillas puede quedar como una palabra, expandirse a una ruta y parecer correcto, o expandirse a varias rutas que find interpreta como puntos de inicio extra.
Cita o escapa el patrón que debe comparar find. Registra como evidencia las diferencias de Bash, zsh y otros shells cuando no hay coincidencias; no adivines la reparación.
3. Clasifica cada token como ruta o expresión
Escribe un argumento por fila. Marca primero rutas iniciales reales, después pruebas como -name y acciones como -print. Comprueba la aridad documentada de cada primary.
No muevas todos los tokens desconocidos al principio. Verifica si son ruta, opción, operando de prueba, agrupador o acción para la implementación instalada.
4. Conserva límites en variables y contenedores
En Bash, una expansión de parámetro sin comillas puede sufrir división de palabras y expansión de rutas. Prefiere arrays para varios argumentos, cita escalares que deban seguir siendo uno e inspecciona alias, funciones, servicios y sustituciones por separado.
No repares con eval ni una sola cadena concatenada. Volver a analizar cambia espacios y comodines y puede abrir una vía de inyección.
5. Demuestra la corrección antes de acciones destructivas
Sustituye primero las acciones por -print y verifica cero, una y varias coincidencias, además de nombres con espacios y guiones iniciales. Confirma el mismo argv desde el programador real.
Solo entonces restaura -delete, -exec u otra acción mutante en un conjunto pequeño y con reversión. Acepta cuando desaparezca el diagnóstico, el conjunto sea correcto y ningún token cambie de papel.
