Разархивируйте .zip файл ко всем каталогам, которые содержат .php файл, который содержит текст “дом” внутри?

Как разархивировать .zip файл ко всем каталогам, которые содержат .php файл, который содержит текст "дом" внутри?

Что-то как:

grep -rl --include='index.php' 'house' /directory/path/of_the_index_file* | xargs unzip /directory2/path/file.zip -d /directory/path/of_the_index_file/

РАЗЪЯСНЕНИЕ: Я просто хочу извлечь простой .zip файл с 2 файлами и одним каталогом ко всем каталогам на сервере, которые содержат index.php файл с определенной строкой в ее коде.

Я был бы очень благодарен за любую справку.

2
задан 12 November 2019 в 15:20

1 ответ

Вы могли использовать xargs sh -c '...' вместе с $(dirname "$1"):

grep -rlZ --include='index.php' house /directory/path/of_the_index_file* \
| xargs -0 -I{} sh -c 'unzip /directory2/path/file.zip -d "$(dirname "$1")"' xargs-sh {}

Или легче, используйте GNU parallel, который имеет dirname функция, включенная с помощью {//}:

grep -rlZ --include='index.php' house /directory/path/of_the_index_file* \
| parallel -0 -n1 unzip /directory2/path/file.zip -d {//}

Избегают распараллеливания, если Вы хотите путем добавления -j1 к parallel.

, Если parallel не установлен, установите его использование:

sudo apt install parallel
<час>

Вы могли бы считать выполнение unzip однажды в начале к временному каталогу и использованию cp или ln внутренним xargs или parallel.

Примечание: Для обоих решений я использую grep -Z вместе с [1 117] для предотвращения проблем с новыми строками где-нибудь в пути. Даже если это не влияет на Вас, это - хорошая привычка заботиться о нем.

2
ответ дан 2 December 2019 в 03:26

Другие вопросы по тегам:

Похожие вопросы: