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 xargs
en los casos en los que -exec … +
podrían utilizarse? (Obviamente, los usaría xargs
si 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 dexargs
; por ejemplo,xargs
permite 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, lafind ... -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-print0
acció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 -0
conjunto de comandos. Si -exec ... +
está disponible y el -0
soporte xargs
no lo está, definitivamente es mejor que utilices el primero; aunque -0
no 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 xargs
proviene 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 \0
como separador, por lo que pueden manipular todos los nombres de archivos posibles sin asuntos.)