Как решить ошибку "tar: invalid magic" на Linux Alpine

С помощью sed, если в 5-ом поле есть только один _, подлежащий замене

$ sed -E 's/^(([^|]+\|){4}[^_]+)_/\1|/' ip.txt 
rat|minty|ruhul|balaji|rat|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
rat|minty|ruhul|balaji|rat1|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
rat|minty|ruhul|balaji|rat2|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat

Решение с помощью perl (аналогично awk), если нужно заменить все _ в 5-ом поле:

$ perl -F'\|' -lane '$F[4] =~ tr/_/|/; print join "|",@F' ip.txt 
rat|minty|ruhul|balaji|rat|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
rat|minty|ruhul|balaji|rat1|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
rat|minty|ruhul|balaji|rat2|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
23
13.04.2017, 15:36
5 ответов

Попробуйте установить пакет tar (apk добавить tar). Busybox tar (по умолчанию) поддерживает не все функции.

34
27.01.2020, 19:42

tar:invalid magic означает, что файл поврежден.

Пожалуйста, проверьте md5sum, если она совпадает... вот что я получил:

 md5sum  sqlite-autoconf-3090100.tar.gz 
 74931054399a2d7acf35637efe8d6f45  sqlite-autoconf-3090100.tar.gz
0
27.01.2020, 19:42

Это не обязательно означает, что версия Alpine tarнесовместима, поскольку Франческо указал, что вам действительно следует проверять контрольные суммы файлов.

Я столкнулся с этим при выполнении curl https://github.com/someproject/releases/project-1.1.0.gz | tar -xvzfв моем Dockerfile.

Оказывается, я забыл, что curlбудет следовать перенаправлениям только в том случае, если вы разрешите это с помощью -L, и поэтому он никогда не попадал в настоящий файл, он буквально загружал html, сообщая ему, что есть перенаправить. Добавление -Lпозволило мне сохранить файл, не раздувая мой контейнер новымtar(помимо «раздувания», добавленногоcurl).

26
27.01.2020, 19:42

Я столкнулся с той же проблемой и решил ее, однако я не уверен, что вы столкнулись с той же проблемой.

Код, который вызвал ошибку:

wget www.example.com/file.tar.gz
tar -zxvf file.tar.gz

Код, который разрешил это:

wget https://www.example.com/file.tar.gz
tar -zxvf file.tar.gz

Обратите внимание, что я забыл «https ://», где файл загружался, но tar выдавал ту же ошибку. Если файл не найден, убедитесь, что вы используете

docker build --no-cache...

0
27.01.2020, 19:42

если вы используете alpine в докере, подтвердите, что вы используете COPYвместо ADDв вашем файле-контейнере (Dockerfile), так как ADDбудет распаковываться при построении слоя

alpine default tar не дает подсказку

tar (child): sqlite-autoconf-3090100.tar.gz: Cannot read: Is a directory
tar (child): At beginning of tape, quitting now
tar (child): Error is not recoverable: exiting now
1
27.01.2020, 19:42

Теги

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