如何将 .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 {//}
如果您愿意,可以通过添加来避免并行-j1
化parallel
。
如果parallel
尚未安装,请使用以下命令进行安装:
sudo apt install parallel
您可以考虑unzip
在开始时运行一次到临时目录并在cp
或ln
内使用xargs
或parallel
。
注意:对于这两种解决方案,我grep -Z
都一起使用以xargs/parallel -0
避免路径中某处的换行符问题。即使它不会影响你,照顾好它也是一个好习惯。