В XFS есть функция, называемая динамическим спекулятивным предварительным выделением EOF. Он может выделить больше места в ожидании записи большего количества байтов, чтобы уменьшить фрагментацию файла.(https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=055388a3188f56676c21e92962fc366ac8b5cb72)
Вы записываете загруженные данные в файл, поэтому на самом деле ничего не передаете в 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
?
Вы можете комбинировать обе команды и пропустить запись файла, указав 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
при необходимости сначала.
wget -qO - "https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gz" | tar -C /var/www/html zxvf -