-X
распределяет равномерно, когда он поражает EOF.
Так что в вашем случае он заполняет буфер для полной командной строки (5039 имен) и запускает ее. Затем он читает еще 800 имен, пока не достигнет EOF. Этого недостаточно, чтобы начать полную работу, поэтому они распределяются по рабочим местам.
Смотрите страницу 37 https://zenodo.org/record/1146014
Это делается таким образом, чтобы избежать необходимости читать все задания заранее, так как все задания могут быть недоступны (подумайте tail -f file.names | parallel ...
).
Возможно, было бы лучше, если бы GNU Parallel читал достаточно имен, чтобы заполнить все рабочие места перед началом следующего задания в -X
режиме, чтобы он мог обнаружить EOF раньше. Это, однако, не было реализовано. Патч приветствуется.
Обходной путь должен использовать:
ls *.jpg | parallel --round --pipe -N1 parallel -Xj1 count
Он не может выводить после каждого задания, но может выполнять вывод с буферизацией:
ls *.jpg | parallel --lb --round --pipe -N1 parallel --lb -Xj1 count
Если имена файлов содержат \ n:
printf '%s\0' *.jpg | parallel --recend '\0' --round --lb --pipe -N1 parallel -0Xj1 count