Это довольно широкий диапазон операционных систем, поэтому я предлагаю установить сценарии «инициализации» для каждой ОС, которые вызывают сценарий «фазы 2», который вы поддерживаете. Этот сценарий "этапа 2" проверяет наличие сценария обновления -для сообщения -; если он существует, то он запускает его, а затем удаляет. Ваш сценарий «обновление фазы 1» установит этот сценарий обновления сообщения --после его завершения и перед перезагрузкой.
В GNU tar, если вы хотите сохранить косую черту перед именами файлов, вам нужна опция:
-P, --absolute-names
Don't strip leading slashes from file names when creating archives.
Итак, tar zcvf ABCD.tar.gz -P -T Files.txt
.
Косые черты, вероятно, будут удалены при распаковке архива, если, конечно, вы не используете там -P
.
Если, с другой стороны, вы хотите удалить косые черты, но без жалоб на tar, вам нужно сделать что-то вроде sed s,^/,, files.txt | tar czf foo.tar.gz -C / -T -
.
Это особенность!
Если префикс косой черты /
был включен в архив при сжатии и извлечении, это означает, что злоумышленнику достаточно будет убедить вас извлечь файл, чтобы перезаписать конфиденциальный файл (, например/etc/shadow
).
На самом деле это не сообщение об ошибке, а скорее информация.
Если вы действительно хотите подавить его, измените каталог на родительский каталог и используйте относительные имена:
cd /
tar -zcvf path/to/files
Вместо
tar -zcvf /path/to/files
В вашем случае, я предполагаю, что имена файлов в -T Files.txt
являются абсолютными.
Другой возможный ответ: вы действительно хотите, чтобы пути к архиву были безопасными для извлечения, и вы хотите удалить начальную косую черту из списка имеющихся у вас файлов.
В этом случае в tar
нет опции, но вы можете сгенерироватьtar
-совместимые файлы с помощью pax
.
pax -s '#^/##' -wz < Files.txt > ABCD.tar.gz
-s '#^/##'
применяет шаблон замены к именам файлов по мере их записи в архив. Этот лишает ведущего /
.