He leído aquí que se puede contar el número de invocaciones de command
en -exec command {} +
canalizando | wc -l
al final de la misma.
Si bien entiendo que -execdir
es diferente, en eso, para cada subdirectorio coincidente que find
descubre, ejecuta una invocación del command
subdirectorio 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
-exec
acción, la+
forma del-execdir
creará una línea de comando para procesar más de un archivo coincidente, pero cualquier invocación decommand
solo 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
echo
y 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 lafindutils
versió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
find
4.4.2:Con
find
4.6.0:fuente