将 .zip 文件解压到包含包含文本“house”的 .php 文件的所有目录?

将 .zip 文件解压到包含包含文本“house”的 .php 文件的所有目录?

如何将 .zip 文件解压到包含包含文本“house”的 .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/

澄清:我只是想将一个包含 2 个文件和一个目录的简单 .zip 文件提取到服务器上所有包含 index.php 文件的目录中,该文件的代码中包含特定的字符串。

如能得到任何帮助我将非常感激。

答案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 {//}

如果您愿意,可以通过添加来避免并行-j1parallel

如果parallel尚未安装,请使用以下命令进行安装:

sudo apt install parallel

您可以考虑unzip在开始时运行一次到临时目录并在cpln内使用xargsparallel

注意:对于这两种解决方案,我grep -Z都一起使用以xargs/parallel -0避免路径中某处的换行符问题。即使它不会影响你,照顾好它也是一个好习惯。

相关内容