Существует максимальная длина списка аргументов для нового процесса в системе POSIX. findразделит выполнение, если пути к файлам длиннее, чем этот. Чтобы увидеть ограничение для Linux, используйте xargs --show-limits(не работайте в Mac OS, если кто-то знает лучшую альтернативу, пожалуйста, прокомментируйте здесь)
edit: украденный прямо из ответа Gnouc, POSIX способ получить максимальную длину списка аргументов getconf ARG_MAX. Тем не менее, я провел эксперимент на моей машине Mac OS, и, похоже, findиспользует чуть больше половины этого числа. Это согласуется с тем фактом, что в системе, где он работает, xargs --show-limitsговорит нам, что он не будет использовать максимальную длину аргумента (в этом случае он также будет использовать около половины этого числа), однако я не смог найти объяснение для этого.
редактировать 2: кажется, что единственный надежный способ определить, сколько параметров findбудет слипаться для каждого вызова, это эксперимент, например, запустив
find / -exec echo {} + | wc -cl
Так как выходные данные findимеют строку для каждого echoвызова, их можно сосчитать, используя wc -l. Общее число байтов echoed является выходом wc -cвместо. Разделив один на другой, вы получите среднее число байтов в параметрах для каждого вызова команды (хотя и немного более низкое значение из-за округления, примерно половина средней длины пути в вашей системе)
find / -exec echo | wcи измерив соотношение между количеством символов и количеством строк, и обнаружил, что максимальная длина используемой командной строкиfindзначительно меньше теоретического предела POSIX и намного ближе кSize of command buffer we are actually usingстроке в выходных данныхxargs --show-limits. Это верно для Linux и может быть верно для реализации Mac OSfind, хотяxargsне будет печатать значение в Mac OS. Есть идеи, почему это происходит?