tar - Удалить ведущие компоненты каталога при извлечении

104

Как вы можете извлечь только целевой каталог, а не полное дерево каталогов?

компресс

tar cf /var/www/site.tar /var/www_bak/site

экстракт

tar xf /var/www/site.tar -C /tmp

Это даст:

/tmp/var/www/site

Как можно избежать создания всего дерева каталогов при извлечении файла?

Что я хочу извлечь, чтобы:

/tmp/site
clarkk
источник

Ответы:

34

Почему бы не использовать -Cопцию при создании:

$ tar cf /var/www/site.tar -C /var/www_bak/ site
кванты
источник
1
TMTOWTDI. Это тоже сработало бы, используя ту же -Cопцию;)
MikeyB
12
Он хочет убрать путь из некоторых ведущих компонентов, а не изменить каталог вывода. Ниже приведен правильный ответ.
aymericbeaumet
4
Мы не можем использовать его, когда кто-то еще готовит архив.
Потому что `` `_t = префикс - $ (дата +% Y% m% d); tar -cjf ".backups / $ _ t.tar.bz2" --transform = "s # ^ (\ ./)? # $ _ t / # x;" - файлы ...; tar -df ".backups / $ _ t.tar.bz2" --strip-components = 1 `` `
AnrDaemon
258

Вы хотите использовать --strip-components=NUMBERопцию tar:

 --strip-components=NUMBER
       strip NUMBER leading components from file names on extraction

Ваша команда будет:

tar xfz /var/www/site.gz --strip-components=2 -C /tmp
MikeyB
источник
19
Этот ответ лучше, потому что вам не нужно думать об этом до создания tar. Вы можете использовать его с уже созданным файлом tar. Спасибо @MikeyB!
Фабьен Кватраво,
4
Я рад сообщить, что это работает как в GNU tar, так и в BSD tar.
Натан Осман
4
и потому что вы не можете быть создателем смолы ... (или если вы делаете это с другим инструментом, и этот инструмент делает глупости ...)
xenoterracide
однако, вы все равно можете пропустить --strip-componentsфлаг, если вы используете встроенную реализацию busybox tar.
sylvainulg
1
@FabienQuatravaux Хорошо, да --- если вы допустили ошибку и создали архив, включающий ведущие каталоги, которые вы не хотите видеть во время извлечения. Но проще построить архив без ведущих нежелательных каталогов.
Калаф