2016-02-07 4 views
0

=== UPDATE ===Grep шаблон из битуминозных Выход

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

Есть несколько папок с папками в папках, поэтому httpdocs/<folder1>/<folder2>/<etc>/index.php, и поэтому '*' подбирает их тоже.

Действительно все, что я хочу, чтобы соответствовать шаблону httpdocs/<folder>/index.php

Я дрянь с RegEx так не зная, что я мог бы поставить. Есть идеи?


У меня есть файл tar.gz 25 Гб, и от этого я хочу, чтобы извлечь определенные файлы. Файл находится:

httpdocs/<account>/index.php

<account> просто означает, что это просто имя - не слишком важно.

В этом точном формате находится около 70 + из этих index.php файлов, и мне нужно извлечь только их файлы из TAR.

я могу сделать это в отдельный файл, например, так (tar -xf site_support_server.com_user-data_1509221232.tgz httpdocs/hotel/index.php), но, как я говорю их вокруг 70 из них, и я не хочу, чтобы пройти через это 1 на 1.

Я думал, может быть, tar -xf site_support_server.com_user-data_1509221232.tgz httpdocs/*/index.php будет работать , но я не думаю, что он распознает «*» в качестве подстановочного знака.

Я что-то упустил или у кого-нибудь еще есть предложения по тому, как быстро это сделать?

Большое спасибо!

+0

Если ваш файл представляет собой gzip, essed tar file (.tgz или .tar.gz) добавить опцию '-z'. – Cyrus

ответ

1

С GNU дегтем:

tar -xvzf your_file.tgz --wildcards "*/index.php" 

Обновление

tar -tvzf your_file.tgz --wildcards "httpdocs/*/index.php" --exclude="httpdocs/*/*/index.php" 
+0

Это сработало, поэтому спасибо за это, но это привело к еще одной проблеме с RegEx. Я обновил свой вопрос. –

+0

Спасибо @Cyrus! Это именно то, что мне нужно :) –

+0

Является ли флаг «--- wildcards» уникальным для команды «tar»? Я не вижу его на странице «человек». –

0

Вы можете указать несколько элементов архива в одной команде. Это означает, что вы можете сделать:

tar -tf some.tar.gz | grep '/index.php$' | xargs tar -xf some.tar.gz 

Следите за пробела в пути, хотя - может быть, вам нужно заменить новую строку с нулевыми байтами и использовать xargs -0