Существует максимальный предел тому, какой длины список аргументов может быть для системных команд - этот предел является определенным для дистрибутива на основе значения MAX_ARG_PAGES
когда ядро компилируется и не может быть изменено, не перекомпилировав ядро.
Из-за пути globbing обрабатывается оболочкой, это будет влиять на большинство системных команд при использовании того же аргумента (" *.jpg"). Так как шарик обрабатывается оболочкой сначала и затем отправляется в команду, команду:
cp -uf *.jpg /targetdir/
по существу то же к оболочке, как будто Вы записали:
cp -uf 1.jpg 2.jpg ... n-1.jpg n.jpg /targetdir/
Если Вы имеете дело с большим количеством jpegs, это может стать неуправляемым очень быстрый. В зависимости от Вашего соглашения о присвоении имен и количества файлов на самом деле необходимо обработать, можно выполнить команду CP на другом подмножестве каталога за один раз:
cp -uf /sourcedir/[a-m]*.jpg /targetdir/
cp -uf /sourcedir/[n-z]*.jpg /targetdir/
Это могло работать, но точно то, насколько эффективный это будет, на основе того, как хорошо можно разбить список файлов в удобные globbable блоки.
Globbable. Мне нравится это слово.
Некоторые команды, те, которые находят и xargs, могут обработать большие списки файлов, не делая мучительно измеренные списки аргументов.
find /sourcedir/ -name '*.jpg' -exec cp -uf {} /targetdir/ \;
- исполнительный аргумент выполнит остаток от командной строки однажды для каждого файла, найденного находкой, заменяя {} с каждым найденным именем файла. Так как команда CP только выполняется на одном файле за один раз, предел списка аргументов не является проблемой.
Это может быть медленно из-за необходимости обработать каждый файл индивидуально. Используя xargs мог предоставить более эффективное решение:
find /sourcedir/ -name '*.jpg' -print0 | xargs -0 cp -uf -t /destdir/
xargs может взять полный список файлов, предоставленный находкой, и разломать его на списки аргументов управляемых размеров и выполнить CP в каждом из тех подсписков.
Конечно, существует также возможность просто перекомпиляции Вашего ядра, устанавливая большее значение для MAX_ARG_PAGES
. Но перекомпиляция ядра является большим количеством работы, чем я готов объяснить в этом ответе.
Вместо Соляриса 10, Linux/ZFS-fuse или FreeBSD, я использовал бы последний dev opensolaris, сборка (создайте 134 с сегодняшнего дня), который имеет более актуальный код ZFS, включенный для диагностирования, какова проблема могла бы быть. Отправьте вывод "zfs, заставляют всю 'невидимую файловую систему'" видеть то, что свойство могло бы предотвратить некоторых из них для разоблачения.
"из-за него разрушающий ядро во время тяжелой межфайловой системы загрузка IO"
Это не может быть ядром FreeBSD, но 3 + ошибка лет с ARC ZFS, который все еще сохраняется!
http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6522017
(Этот противен, поскольку это также выйдет от пределов VM гипервизора!)