Распакуйте файл с помощью bunzip2

Я хочу распаковать файл, я написал эту команду:

bunzip2 linux-source-4.15.0.tar.bz2

и получил это:

bunzip2: Input file linux-source-4.15.0.tar.bz2 is not a normal file.

Я хочу точно знать, в чем проблема.

Я запустил файл linux-source-4.15.0.tar.bz2 и получил:

linux-source-4.15.0.tar.bz2: symbolic link to linux-source-4.15.0/linux-source-4.15.0.tar.bz2
2
задан 11 July 2019 в 04:09

1 ответ

TL; DR: можно извлечь целый архив с tar xf.

Как упомянутый Rinzwind, bunzip2 к сожалению, отказывается воздействовать на символьные ссылки. Вывод file показанный, что Ваш .bz2 файл является символьной ссылкой, а не регулярным файлом.

То, как необходимо пойти о распаковке файла, зависит от конкретно, что Вы хотите сделать. Рассмотрение конкретного файла, на который Вы воздействуете, вероятно что Ваш bunzip2 команда не сделала бы вполне, что Вы хотели так или иначе, и что необходимо извлечь ее с tar вместо этого.

Если Вы хотите распаковать сам архив tar

Ваш .tar.bz2 файл является архивом tar, который bzip2-сжат. Вы спросили, как распаковать файл, который можно сделать (см. ниже). Но если Вы сделаете это, то результатом будет несжатый архив, содержание которого Вы затем, вероятно, хотели бы извлечь.

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

tar xf linux-source-4.15.0.tar.bz2

Вы могли бы хотеть извлечь файл как свой собственный некорневой пользователь, которого можно сделать при помещении его где-нибудь, у Вас есть полномочия записи. Если это - то, что Вы хотите, я предлагаю идти к месту назначения и извлечь его путем предоставления его полного пути. Для того файла это могло бы быть:

tar xf /usr/srclinux-source-4.15.0.tar.bz2

Если Вы хотите tar для списка каждого файла как, он извлекает его, добавьте v опция:

tar xvf linux-source-4.15.0.tar.bz2

Если по некоторым причинам Вы хотели сказать tar явно то, что архив, который Вы извлекаете, bzip2-сжат, Вы могли сделать так путем добавления j опция:

tar xvjf linux-source-4.15.0.tar.bz2

(Можно использовать v и j опции, независимо от ли путь, который следует f опция является абсолютной или относительной.)

Если Вы хотите создать распакованную копию файла

Если Вы хотите распаковать файл и поместить результат в текущий каталог, можно использовать bzcat -d и перенаправление результат:

bzcat -d linux-source-4.15.0.tar.bz2 >linux-source-4.15.0.tar

Если Вы хотите заменить цель распакованным файлом

Если Вы хотите распаковать цель символьной ссылки, заменяя его исходным (несжатым) файлом, то можно использовать realpath разыменовать символьную ссылку. В этом случае я сильно сомневаюсь, что Вы хотите это, но вот то, на что это похоже для дальнейшего использования:

bunzip2 "$(realpath linux-source-4.15.0.tar.bz2)"

Или просто найдите цель и передайте ее bunzip2, так как необходимо определенно проверить то, что цель символьной ссылки прежде выполняет операцию, которая удаляет ее и заменяет ее чем-то еще (в случае, если Вы ошибаетесь, и цель не то, что/где Вы думаете, что это). Для нахождения цели можно выполнить это realpath команда отдельно:

realpath linux-source-4.15.0.tar.bz2

Конечно, можно также осмотреть файлы с ls -l, file, и readlink узнать, являются ли они символьными ссылками и какова их прямая цель.

1
ответ дан 2 December 2019 в 04:36

Другие вопросы по тегам:

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