Вы можете указать yum устанавливать отдельные файлы. Для начала потребуется больше времени, так как теперь он должен загружать гораздо большие списки файлов из репозиториев, но он выполнит свою работу.
yum reinstall /lib64/libperl.so
Замена сложной команды копирования:
tar -cf - -C /home/auser/data. | tar xpf - -C /home/auser/data2
Вместо того, чтобы пробовать какие-то обходные пути, необходимо понять, в чем заключается ошибка. Ошибка связана с тем, что данный аргумент превысил максимальную длину аргумента до вызова команды.
Это может произойти потому, что
find
), вызвал функцию из семейства exec
, передав слишком длинный список аргументов. Команда getconf ARG_MAX
сообщает вам максимальную длину аргументов.
Команда
cp $(git diff --name-only branch2 force-app/)...
означает, что команда git
выполняется, а затем ее вывод передается в качестве аргументов в cp
. Если этот вывод превышает максимальную длину аргументов, вы получаете указанную ошибку.
Команда
find... -exec cp -t target {} +
мало чем отличается, потому что команда +
в конце команды find
указывает find
передавать имена всех найденных файлов вместо фигурных скобок.
Таким образом, решение состоит в том, чтобы найти способы формулировать ваши команды способами, которые не приводят к огромным строкам аргументов. xargs
или подстановка команд могут быть вашими друзьями.
Как отметил @AaronD.Marasco в своем комментарии:
find... -print0 | xargs -0 cp {} target
(xargs
заботится о максимальной длине аргумента. Обратите внимание, что фигурные скобки здесь являются аргументом xargs
, а не find
.но они имеют то же значение ).
Или с заменой процесса (в этом случае менее эффективно):
while IFS= read -d $'\0' -r Filename; do
# do something with $Filename:
cp "$Filename" target
done < <(find... -print0)
Для получения дополнительной информации обратитесь к справочным страницам find
и xargs
.