Не удалось передать поток из wget в tar и извлечь его в определенное место.

В XFS есть функция, называемая динамическим спекулятивным предварительным выделением EOF. Он может выделить больше места в ожидании записи большего количества байтов, чтобы уменьшить фрагментацию файла.(https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=055388a3188f56676c21e92962fc366ac8b5cb72)

-2
20.08.2019, 12:13
3 ответа

Вы записываете загруженные данные в файл, поэтому на самом деле ничего не передаете в tar. Конвейеры полезны только в том случае, если вы хотите, чтобы стандартный вывод одной программы стал стандартным вводом другой. Здесь вы загружаете файл, а затем хотите открыть его с помощью другого инструмента, поэтому каналы бесполезны.

Следующая проблема заключается в том, что ваш $downloaded_fileна самом деле является URL-адресом. Поэтому, когда вы tar -xzvf ${downloaded_file}на самом деле запускаете tar -xzvf https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gzи это не удастся, поскольку этого файла не существует (это не файл, это интернет-адрес ).

То, что вы хотите сделать, примерно так:

war="/var/www/html"
targetUrl="https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gz"
fileName="${targetUrl##*/}"
wget "$targetUrl" -O "$war/$fileName" && 
    tar -xzvf "$war/$fileName"

Я не понимаю, почему вариант -Pиз wgetможет быть здесь уместным, а также зачем вам нужен --transformиз tar, но если вы должны его использовать, вы можете сделать:

war="/var/www/html"
domain="example.com"
targetUrl="https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gz"
wget "$targetUrl" -O "$war/$fileName" && 
    tar -xzvf "$war/$fileName" --transform="s,^${targetUrl},${domain},"

Хотя я действительно сомневаюсь, что они вам нужны. Зачем https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gzбыть частью путей в архиве mediawiki-1.33.0.tar.gz?

2
28.01.2020, 05:14

Вы можете комбинировать обе команды и пропустить запись файла, указав wgetписать в его стандартный вывод:

wget https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gz -O - |
tar -xzvf -

Это приведет к тому, что выходные данные tarбудут смешаны с индикатором выполнения wget, потому что он начнет извлекать tarball, пока wgetвсе еще загружает его, поэтому вы можете настроить параметры вывода..

Вы можете использовать опцию tar-Cдля управления тем, куда извлекаются файлы:

wget https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gz -O - |
tar -xzvf - -C /var/www/html

Целевой каталог должен существовать до запуска команды, так что mkdirпри необходимости сначала.

4
28.01.2020, 05:14

wget -qO - "https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gz" | tar -C /var/www/html zxvf -

2
28.01.2020, 05:14

Теги

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