Ответы:
Самый близкий, который я могу найти, является --transform
выбором. Я не знаю точно, но я предполагаю, что это флаг только для GNU:
--transform, --xform EXPRESSION
use sed replace EXPRESSION to transform file names
С помощью этого, вы можете передать sed
команду подстановки и изменить /
на /abc
:
tar cf root.tgz --transform 's/^\//\/abc/' /
Это все равно будет печатать /
пути при создании архива, но они станут, /abc
когда вы его распакуете.
Другой подход, если у вас tar
нет --transform
выбора, это сделать /abc
символическую ссылку, указывающую на, /
а затем выполнить tar:
$ ln -s / /abc
$ tar chf root.tgz /abc
Это -h
важно, так как это то, что говорит tar
по ссылкам:
-h, --dereference
follow symlinks; archive and dump the files they point to
Это будет иметь эффект установки /abc
в качестве каталога верхнего уровня.
С GNU tar вы можете использовать эту команду:
tar --transform="s|/|/abc/|" -Pcf bar.tar /
В противном случае, есть переносимый способ сделать это, то есть тот, который не зависит от GNU или другого конкретного расширения tar, но основан на инструменте POSIX, который должен быть доступен на любой Unix-совместимой машине:
pax -w -s '/\//\/abc\//' -f foo.tar /
Вот как я это сделал, который работает для получения звонков из любого места (не только /):
tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *
Он просто добавляет /abc/
к началу каждого пути.
tar: Removing leading / from member names
. Использование's|^|abc/|'
работало хорошо для меня.