Альтернативный подход без привилегий - использовать программу fakeroot
, чтобы сделать вид, что вам разрешено менять владельца. В то время как другие атрибуты tar потеряны, он сохраняет режим, mtime и uid / gid. Эти команды создают временный каталог, извлекают подмножество файлов и, наконец, создают новый архив:
mkdir tmp
shopt -s extglob
является специфичным для bash -(shopt
отдельно является специфичным для bash -, bash
является единственной оболочкой, имеющей два набора параметров)
Параметр extglob
в bash
включает поддержку расширенных подстановочных значений ksh. В ksh это не нужно, хотя обратите внимание, что в ksh эти глобусы не распознаются при использовании в переменных.
printf -v
является расширением bash
. Это не поддерживается и не нужно в ksh93, потому что там подстановка команд не создает подоболочку. Поэтому вместо:
printf -v var...
использовать
var=$(printf...)
или в кш93:
var=${ printf...;}
если аргументы printf
должны вносить изменения в среду (, как в ${foo=bar}
или$((n++))
). (хотя обратите внимание, что он удаляет завершающие символы новой строки ).
Также обратите внимание, что ksh93 поддерживает арифметику с плавающей запятой, в отличие от bash
, поэтому вам не нужно прибегать к такого рода хакам.
Кроме этого, я не вижу здесь ничего, что могло бы объяснить сообщение об ошибке, которое вы получаете.