¿Soporte generalizado para buscar con "-exec... +"?

¿Soporte generalizado para buscar con "-exec... +"?

A juzgar porel registro de cambios de GNU findutilsTenía que estar en el descubrimiento de GNU durante al menos una década (también más tiempo que era parte de POSIX), entonces, ¿se puede asumir con seguridad que ahora es compatible en todas partes?

Además, ¿hay buenas razones para defenderlas xargsen los casos en los que -exec … +podrían utilizarse? (Obviamente, los usaría xargssi necesita algunos de esos parámetros especiales como, por ejemplo, aquellos para controlar el número máximo de argumentos, paralelismo,…)

Una cita interesante deuna parte de la documentación de GNU findutil:

[encontrar con-exec … + ]puede ser menos eficiente que algunos usos de xargs; por ejemplo, xargspermite crear nuevas líneas de comando mientras el comando anterior aún se está ejecutando y le permite especificar una cantidad de comandos para ejecutar en paralelo. Sin embargo, la find ... -exec ... +construcción tiene la ventaja de una amplia portabilidad. GNU findutils no era compatible con '-exec ... + ' hasta la versión 4.2.12[Enero de 2005]; una de las razones de esto es que ya tenía la -print0acción '' en cualquier caso.

Respuesta1

la +variante de-exec se introdujo en POSIX despuésInterpretación PASC 1003.2 #210en 2001, y se fusionó con el estándar POSIX en el número 6 (como se documenta en el estándar actualfind(1)documentación). Según la Interpretación, todos los derivados de System V Release 4 lo admiten, al igual que HP-UX (en 2001, sé que HP-UX 10 no lo admitía); Obviamente, cualquier sistema compatible con POSIX número 6 o 7 también lo admite.

El GNU-ismo es en realidad el find -print0 | xargs -0conjunto de comandos. Si -exec ... +está disponible y el -0soporte xargsno lo está, definitivamente es mejor que utilices el primero; aunque -0no hay razón para no usarlo -exec ... +si es compatible con lo que necesita.

Respuesta2

¿Se puede asumir con seguridad que [ -exec ...] ahora es compatible en todas partes?

Definitivamente se espera que la -exec ... '{}' ';'variante, que proporciona exactamente una coincidencia por comando ejecutado, sea compatible en todas partes ahora, incluso en sistemas Unix que no sean POSIX.

El-exec ... '{}' + variante, no estoy seguro. Es cierto que está definido enPOSIX-1, por lo que definitivamente es compatible con todos los sistemas POSIXy actuales. Sin embargo, no estoy seguro de si todos los sistemas Unix antiguos (aún en uso) lo admiten.

¿Existen buenas razones para abogar por xargs en los casos en los que -exec ... '{}' +se podría utilizar []?

No en realidad no. ¿Por qué utilizar dos comandos cuando uno sería suficiente?

El problema es más bien que si la única herramienta que conoces es un martillo, todos los problemas parecen clavos. El poder de xargsproviene del hecho de que puede manipular la lista de coincidencias usando bash, sed, awk, etc., antes de ejecutar los comandos que actúan sobre la lista.

(En la práctica, esto requiere que los nombres de archivos y directorios no tengan nuevas líneas incrustadas. Bash y GNU find, sed, awk y xargs admiten el carácter nulo \0como separador, por lo que pueden manipular todos los nombres de archivos posibles sin asuntos.)

información relacionada