He leído aquí que se puede contar el número de invocaciones de commanden -exec command {} +canalizando | wc -lal final de la misma.
Si bien entiendo que -execdires diferente, en eso, para cada subdirectorio coincidente que finddescubre, ejecuta una invocación del commandsubdirectorio que contiene, si tengo más de un archivo que coincida en un subdirectorio, debería ¿Acabo con el número de invocaciones igual al número de subdirectorios coincidentes, y no el número de invocaciones que coinciden con el número de archivos coincidentes en esos subdirectorios?
Estoy terminando con este último cuando ejecuto lo siguiente:
$ find . -name "bob*" -execdir echo {} + | wc -l
La página del manual para los execdir command {} +estados que el primero debería ser el caso:
Al igual que con la
-execacción, la+forma del-execdircreará una línea de comando para procesar más de un archivo coincidente, pero cualquier invocación decommandsolo enumerará los archivos que existen en el mismo subdirectorio.
es decir
Me estoy poniendo:
./file1inDir1
./file2inDir1
./file3InDir2
./file4InDir3
Cuando espero esto, según la página del manual:
./file1inDir1 ./file2inDir1
./file3InDir2
./file4InDir3

echoy los argumentos son generados por{} +y no tiene nuevas líneas en sus nombres de archivo (la mayoría de las personas no las tienen) ENTONCES el número de líneas es el número de invocaciones y funciona. Si el comando es decirhead -n 999000 /dev/urandom, va terriblemente mal.Respuestas:
Este es un problema de rendimiento de
find. En lafindutilsversión 4.3.4, una solución tenía que restringir el número de argumentos que-execdir ... {} +se utilizarán a 1. En la versión 4.5.9 se eliminó el límite.Ver un ejemplo:
Con
-execdir {} +, el comando debe ejecutarse 3 veces. La segunda invocación debe tener 3 argumentos.Con
find4.4.2:Con
find4.6.0:fuente