У меня возникла эта проблема при запуске образа hello-world-nginx из kitematic
Если я запустил его из терминала Docker следующим образом, я я могу просмотреть выходной HTML-код контейнера из моего браузера Windows:
docker run -p 80:80 hello-world-nginx
Параметр -p
перенаправляет порт 80 на VirtualBox на порт 80 на контейнере.
Кажется, вы хотите добавить файлы в tar
архив, один за другим, из стандартного вывода какой-либо другой команды.
Предполагая, что архив существует, вы можете добавить в него данный файл, используя
tar -u -f archive.tar filename
или, если вы работаете со сжатыми архивами,
tar -uz -f archive.tar.gz filename
Файл с именем filename
должен существовать в файловой системе. Это означает, что ваш рабочий процесс должен будет сохранить файл, а затем добавить его в архив перед повторным удалением файла.
Возможно что-то вроде этого:
somecommand filename.png >newfile1.png &&
tar -u -f archive.tar newfile1.png &&
rm newfile1.png
&&
между командами гарантирует, что команда не будет запущена, если предыдущая команда по какой-либо причине не удалась.
Обратите внимание, что вам придется добавлять каждый файл с новым именем в архив, так как добавление файла с тем же именем, что и у ранее -существующего файла, «скроет» старый файл в архиве.
Упакуйте файл с помощью filename
с выводом какfilename.tgz
tar czf filename.tgz filename
Упаковать один или несколько из списка файлов (с)
tar czf files.tar.gz --files-from./filelist
То же самое, но другим способом
ls -1b. >./filelist && tar czf./files.tar.gz --files-from./filelist
Добавить (архив обновлений )с дополнительным файлом (s)
tar czuf./files.tar.gz./newfile
примечание:в зависимости от вашей версии tar
опции могут или могут не требовать предшествующего дефиса(-)
легенда опций
gzip
сжатие tar
имя файла См. также справочную страницу tar
ХТХ
Вы можете легко обойти это, зайдя в файловый менеджер, щелкнув правой кнопкой мыши файл и выбрав команду «Сжать», а затем сделать его любым типом файла, который вы хотите.
Использование zip и bash:
cat some_file.png | zip -v --fifo archive.zip /dev/stdin
printf '%s\n' '@ dev/stdin' '@=custom_filename1.png' | zipnote -w archive.zip
# view archive contents:
unzip -l archive.zip
Archive: archive.zip
Length Date Time Name
--------- ---------- ----- ----
5200 2020-09-26 12:41 custom_filename1.png
--------- -------
5200 1 file
Вы упомянули tar, но описали два ограничения:
Ваше ограничение «нет временного файла» означает, что вы должны создать архив из канала. Tar читает только файлы -, а не каналы -, так что tar, вероятно, не годится -.
zip --fifo
читает из канала и сохраняет результат в виде файла в архиве. Zip может быть менее распространенным, чем tar, но определенно более распространенным, чем 7z.
zip читает содержимое файла из /dev/stdin:
cat some_file.png | zip -v --fifo archive.zip /dev/stdin
zip warning: Reading FIFO (Named Pipe): /dev/stdin
adding: dev/stdin (in=39032) (out=1468) (deflated 96%)
total bytes=39032, compressed=1468 -> 96% savings
Это сохраняет содержимое от some_file.png
до archive.zip
как файл dev/stdin
Затем переименуйте сохраненный файл в custom_filename1.png
с помощью zipnote
. Это действие по переименованию является атомарным -, временные файлы не создаются.