2 votos

Descomprimir un .archivo zip a todos los directorios que contienen .archivo php que contiene el texto "casa" en el interior?

Cómo descomprimir un .archivo zip a todos los directorios que contienen .archivo php que contiene el texto "casa" en el interior?

Algo así como:

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/

ACLARACIÓN: simplemente quiero extraer un simple .archivo zip con 2 archivos, uno de directorio, a todos los directorios en el servidor que contiene un index.php archivo con una cadena específica dentro de su código.

Yo estaría muy agradecido por cualquier ayuda.

2voto

Rouven Volkmann Puntos 51

Usted podría utilizar xargs sh -c '...' junto con $(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 {}

O más fácil, el uso de GNU parallel, lo que ha dirname característica que se incluye el uso de {//}:

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

Evitar la paralelización si desea agregando -j1 a parallel.

Si parallel no está instalado, instálelo mediante:

sudo apt install parallel

Usted podría considerar la posibilidad de ejecución unzip una vez en el principio a un directorio temporal y uso cp o ln dentro xargs o parallel.

Nota: Para ambas soluciones, yo uso grep -Z junto con xargs/parallel -0 para evitar problemas con los saltos de línea en algún lugar en el camino. Incluso si esto no te afecta, es un buen hábito para tomar el cuidado de él.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: