Описание тега ouran-high-school-host-club
Это ответ на очень большие результирующие наборы, и проблемы с производительностью в основном, например, при получении списка файлов по медленной сети. Для небольшого количества файлов (скажем, несколько 100 или даже 1000 на локальном диске) большинство это под вопросом.
Параллелизм и использование памяти
Помимо прочего даны ответы, связанные с проблемами сепарации и такие, есть еще одна проблема с
для файл в Найти . -тип F -имя ...`; что-то сделать с ${файл}; сделано
Части внутри обратные кавычки и полностью оценивается прежде, чем разбивается на переносы строк. Это значит, если вы получите огромное количество файлов, она может либо подавиться, что размер ограничения существуют в различных компонентах; вам может не хватить памяти, если нет границ; и в любом случае придется ждать, пока весь список был выход найти
, а затем обрабатывается для
еще до запуска первого что-то
.
Предпочтительный способ для UNIX для работы с трубами, которые по своей сути работают параллельно, и которые также не нуждаются в сколь угодно огромных буферов в целом. Это значит: вы бы предпочли для найти
, чтобы работать параллельно с Вашим что-л
, и оставить только имя текущего файла в оперативной памяти, в то время как его руки это что-то
.
По крайней мере, частично нормального решения для этого является вышеупомянутое найти -что-то старпома
. Это избавляет от необходимости держать все имена файлов в память и работает хорошо параллельно. К сожалению, он также начинается один что-то
процесс для каждого файла. Если что-то
может работать только на один файл, то это так и должно быть.
Если это вообще возможно, оптимальным решением будет найти -print0 команды | что-Л
С чем-л
, будучи в состоянии обрабатывать имена файлов на его stdin. Тогда у вас есть только один что-то
процесс независимо от того, сколько файлов есть, и вам нужно буферная только небольшое количество байт (что бы внутренняя труба буферизация происходит) между двумя процессами. Конечно, это скорее нереально, если что-то
является стандартом в Unix/POSIX для команды, но может быть подход, если вы пишете его сами.
Если это невозможно, то найти -print0 команды | команды xargs -0 что-то
, вероятно, одним из лучших решений. Как @dave_thompson_085 в комментариях упоминалось, команды xargs
не разделить аргументы на нескольких прогонов что-то
, когда система ограничений (по умолчанию в диапазоне от 128 кб или как там ограничение накладывается старпома
на систему), и имеет возможность влиять на то, как много файлов данного на один вызов чего-л
, следовательно, находя баланс между количеством чего-л
процессов и начальной задержки.
Редактировать: удален понятия "лучше" - трудно сказать, будет ли что-то лучше будет урожай. ;)