Linux tar: только - преобразовать определенные файлы

787
Bradley Odell

Я пишу сценарий bash, который упаковывает мое приложение в файл TAR. Файлы не расположены на диске так, как они должны быть расположены в файле TAR, поэтому я решил использовать опцию --transform.

Однако кажется, что команда --transform применяется глобально, а не к файлам, включенным после.

Пример:

tar \ --exclude='webmanager/bin/dev' \ --exclude='webmanager/.config.ini' \ --show-transformed-names \ --create --gzip --verbose \ --file 'output.tgz' \ -C '../../../' \ 'include' \ 'resources' \ 'webmanager' \ 'rootconfig.php' \ -C 'webmanager/bin/dev' \ 'index.php' \ 'README.md' \ --transform='s|^|webmanager/|r' \ '.config.ini' 

По сути, этот код берет файл из webmanager/bin/dev/.config.iniи помещает его webmanager/.config.iniв файл TAR. Но я хочу только преобразовать файл .config.ini. В настоящее время все содержимое преобразуется с префиксом webmanager/. Я надеялся, что эта команда ведет себя как -C(изменить текущий каталог) - где она влияет только на входы после нее.

Я просмотрел справочные страницы TAR и не могу понять, как это сделать правильно. Пожалуйста помоги!

1
Не стесняйтесь писать патч. Ipor Sircer 7 лет назад 0

1 ответ на вопрос

1
Alessandro Dotti Contra

Кажется, --transformопция работает на всех файлах действительно. Кстати, я нашел эту страницу о tarтом, что может помочь вам как - то.

Если позволите, я бы предложил вам другой подход: cpвыложите нужные файлы во временный каталог ( команда сделает), измените ваш .config.in sedи используйте его tarдля упаковки всего. Вы можете создать скрипт даже Makefile, если вы знакомы с make.

Я рекомендую делать жесткие ссылки (`cp -l`) вместо копирования, чтобы сэкономить время и место на диске. Kamil Maciorowski 7 лет назад 2
Да, так лучше Спасибо что подметил это. Alessandro Dotti Contra 7 лет назад 0

Похожие вопросы