У меня есть следующий архивный каталог:
itunes20140618.tbz
Я хочу извлечь из него один файл под названием:
itunes20140618/video
Как бы я это сделал?
Пока что я делаю
$ bzip2 -d /tmp/itunes20140618.tbz
Но, похоже, он создает каталог tar всего. Как бы мне извлечь только один видеофайл?
В настоящее время, если я извлекаю один файл через tar, это занимает около 1 минуты, а затем «зависает» еще на 20 минут, пока не закончит чтение архива tar. Есть идеи, как это улучшить?
решение1
tar -xvjf itunes20140618.tbz itunes20140618/video
В данном случае этого должно быть достаточно, но если вам нужна дополнительная помощь, сделайте следующее:
info tar
Чтобы извлечь определенных членов архива, укажите их точные имена членов в качестве аргументов, как выводится
--list (-t)
. Если вы по ошибке удалили один из файлов, которые вы поместили в архивcollection.tar
ранее (например,blues
), вы можете извлечь его из архива, не изменяя структуру архива. Его содержимое будет идентично исходному файлу,blues
который вы удалили.Сначала убедитесь, что вы находитесь в
practice
каталоге, и перечислите файлы в каталоге. Теперь удалите файл,blues
и перечислите файлы в каталоге снова.Теперь вы можете извлечь элемент
blues
из архивного файла `collection.tar' следующим образом:
$ tar --extract --file=collection.tar blues
Если вы снова выведете список файлов в каталоге, вы увидите, что файл
blues
был восстановлен с исходными разрешениями, временем изменения данных и владельцем. (Эти параметры будут идентичны тем, которые были у файла, когда вы изначально поместили его в архив; однако любые изменения, которые вы могли внести до удаления файла из файловой системы, _не_ будут внесены в элемент архива.) Архивный файл,collection.tar
, такой же, как и до извлеченияblues
. Вы можете убедиться в этом,tar
запустив--list (-t)
.
решение2
Архив, такой как .zip
, .rar
или .7z
состоит из множества файлов, объединенных вместе и сжатых. .tar
Архив состоит из множества файлов, объединенных вместе, но формат tar не включает никакого сжатия. Файл .gz
, .bz2
или .xz
— это один сжатый файл. A .tar.gz
, .tar.bz2
, и т. д. — это сжатый архив; .tbz
— это суффикс, который иногда используется вместо .tar.bz2
, точно так же, как .tgz
иногда используется вместо .tar.gz
.
bzip2 -d /tmp/itunes20140618.tbz
распаковывает файл. У вас остается несжатый архив tar. bzip2
не создает tar: он распаковывает то, что ему дано, и поскольку ему дан сжатый tar, на выходе получается несжатый tar. Вы можете распаковать полученный файл с помощью tar -xf /tmp/itunes20140618.tar
. Чтобы извлечь только один файл, это tar -xf /tmp/itunes20140618.tar itunes20140618/video
.
Достаточно новые версии tar для Linux, FreeBSD, MINIX3 и OSX автоматически обнаруживают сжатые архивы, поэтому вы можете вызывать tar изначально, не беспокоясь о сжатии, используемом в архиве:
tar xf itunes20140618.tbz itunes20140618/video
Более старые версии tar, а также многие современные системы, такие как OpenBSD, Solaris и Linux с BusyBox, по крайней мере, могут вызывать bzip2
скрытые функции, даже если вам приходится явно сообщать им об этом с помощью соответствующей -j
опции.
tar -xjf itunes20140618.tbz itunes20140618/video