Как мне распаковать tar в другой каталог?

18

Это не работает:

tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive

Для меня не очевидно, что бы сделать это, кроме как извлечь его на место и переместить файлы.

Кит Сунде
источник

Ответы:

28

От man tar:

     -C directory
         In c and r mode, this changes the directory before adding the
         following files.  In x mode, change directories after opening the
         archive but before extracting entries from the archive.

т.е. tar xC /foo/bar -f /tmp/foo.tar.gzдолжен делать работу. (в FreeBSD, но GNU tar в этом отношении практически одинаков, см. «Изменение рабочего каталога» в его руководстве )

Sr-
источник
4
Я рекомендую протестировать это поведение с не-GNU версиями tar . Страница руководства Solaris упоминает эту опцию только в комбинации операций добавления и замены . Будучи любопытным, я проверил это с помощью операции извлечения . Solaris' деготь ничего не выдавать какие - либо ошибки или предупреждения и извлеченный архив в текущей папке =: - /
КТФ
1
Также не работает в AIX-версии tar: «Файл -C отсутствует в архиве» - «-C» работает для создания тарболлов.
DarkHeart
Можно ли поменять основной каталог с новым именем?
тофутим
9

если вы хотите извлечь архив tar в другом месте, просто перейдите в каталог назначения и распакуйте его там:

 mkdir -p foo/bar
 cd foo/bar
 tar xzvf /tmp/foo.tar.gz

Команда, которую вы использовали, будет искать файл foo/barв архиве и извлекать его.

КТФ
источник
9

Выполнение:

(cd foo/bar ; tar xf /tmp/foo.tar.gz )

сделал бы работу.

По сути, это порождает новую оболочку (круглые скобки), в этой подоболочке измените каталог на foo/barи затем распакуйте файл.

Вы можете изменить его ;, &&чтобы убедиться, что все cdработает нормально.

jfg956
источник
1
Ничего себе, что вы можете запустить оболочку, просто круто! Я понятия не имел, что ты можешь сделать это.
Кит Сунде
0
tar -xf ancd.tar.gz my/name/file

Вы можете дать имя файла ./fileпосле tar-файла.

tar -xf ancd.tar.gz ./my/name/file

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

less ...tar.file  
user2761565
источник
0

Я столкнулся с чем-то похожим и решил эту проблему.

Проблема была в создании файла, а не в созданном файле.

При попытке скопировать и передать файл в каталог A, я указал путь к исходному файлу в команде tar.

tar -cvf MyFile.tar /foo/bar/dir/not/needed/path/*

Что я смог сделать, это решить

cd /foo/bar/dir/not/needed/
tar -cvf /tmp/MyFile.tar path*

При передаче и распаковке архива создаются необходимые подкаталоги.

tar -xvf MyFile.tar
OtisM
источник
0

Измените каталог, куда вы хотите извлечь

cd /u02/restore

если расположение файла извлечения в /u01/backup.tar, то

Извлечь следующим образом:

cd /u02/restore
tar -xvf /u01/backup.tar
Тея
источник
0

Команда:

tar -xzvf foo.tar.gz -C /home/user/bar/

извлечет входной файл "foo.tar.gz" в каталог /home/user/barпри печати обработанных файлов.

tzabal
источник