Я пытаюсь добавить файл в архив tar из выходного файла программы, не генерируя его на диске. Подумайте о файле VERSION
, который автогенерируется при запуске скрипта сборки. Я попытался это, но разыменованные символический только именованный канал, а не обычный файл:Добавить stdin в качестве другого файла в tar-архив
$ date +%s | \
tar cf test.tar \
--dereference \
--transform="s#/proc/self/fd/0#VERSION#" \
/proc/self/fd/0 \
other_files \
and_folders/
Результат должен быть файл VERSION
с меткой времени внутри архива дегтя ж/о локально генерации файла:
$ tar tf test.tar
VERSION
other_files
and_folders
Спасибо! Это в основном то, как я это делаю прямо сейчас. Выполнение 'mktemp', добавив его в архив с помощью' --transform = s/tempfile/VERSION/', а затем удалив. Я просто надеялся сделать этот шаг немного более лаконичным с какой-то магией труб. – Boldewyn
Это единственный способ сделать это, потому что вы не можете дать TAR имя файла и его содержимое через каналы. '/ proc/self/fd/0' не работает, поскольку« tar »архивирует ссылки как специальные файлы, а не расширяет их содержимое. Я также удивлен, что '--dereference' не отключает это в этом случае. –
Ну, '--dereference' действительно имеет эффект: без, упакованный'/proc/self/fd/0' остается символической ссылкой, с ним это именованный канал (тип, который 'ls -F' добавляет' | 'to). Но упакованная труба имеет ограниченное использование ... – Boldewyn