2009-05-10 2 views
47

Как извлечь подкаталог в tarball в текущий каталог?Как распаковать подкаталог в текущий каталог?

Пример, тарбалл из wordpress:

wordpress/ 
wordpress/wp-trackback.php 
wordpress/wp-config-sample.php 
wordpress/wp-settings.php 
wordpress/wp-rss2.php 
wordpress/readme.html 
wordpress/index.php 
... 

Как извлечь все под wordpress/ в текущем каталоге? Другими словами, он не будет создавать каталог wordpress.

Я попытался это не повезло:

tar xvfz latest.tar.gz wordpress -C ./ 

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

+0

К тем -1-го и предлагающему закрыть этот вопрос: как получилось? –

+3

У меня была эта точная проблема в контексте программирования. Давайте попробуем быть немного более широкими, люди - если s/wordpress/kernel_source/g достаточно, чтобы задать вопрос «связанный с программированием», с самого начала это было связано с «программированием». –

+1

@j_random_hacker - вопрос не связан с программированием. вопрос в основном «как использовать утилиту tar в системе unix?» в этом нет ничего связанного с программированием. он может перейти на serverfault или на форум для использования unix. –

ответ

82

Почему вы не распаковку нормально, то просто:

mv wordpress/.* . 
mv wordpress/* . 
rmdir wordpress 

Но, увы, есть:

tar --strip-components=1 -zxvf wordpress.tgz 
+3

Я надеялся, что есть способ сделать это в одной команде. –

+1

Интересно, что компоненты strip - это опция для моего FreeBSD boxen, но не для некоторых моих старых Linux-инсталляций. –

+0

+1. Обратите внимание, что если tarfile содержит файл или каталог с именем wordpress/wordpress, ваша вторая команда mv завершится с ошибкой. (Но престижность за ловушку скрытого файла.) –

6

Удивительно, но мой tar (GNU дегтя v1.16) не имеют возможность разбивать элементы начального пути.

Однако, похоже, что в более поздних версиях есть параметр --strip-components=number, который разделит многие компоненты с начала пути.

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

ln -s . wordpress 
tar xvfz latest.tar.gz wordpress 
rm wordpress 
+0

В ящике, в котором я нахожусь, нет этого параметра «strip-components», поэтому идея symlink интересна один. Я не могу не задаться вопросом, есть ли что-то, чего нам не хватает. Unix - это так ... обычно есть некоторые неочевидные способы, которые вы можете узнать только по заданию. Отсюда мой вопрос! –

+0

@Cory: Ну, я думаю, что ответ на этот вопрос: «Разработчики tar были реализованы и представили опцию --strip-components». :) –