2010-11-30 16 views
6

Hola chicos, tengo problemas para pasar la variable a% exe del código. Necesitamos su ayuda.¿Cómo paso la variable dentro de find y bash -c?

Aquí está mi código de trabajo que utilizo el interior de escritura del golpe:

## Function 
targz() { 
    find $1 -type f -name "*.$2" -exec \ 
    bash -c 'old=$(basename {}); new=${old/%exe/tar\.gz}; \ 
     tar -zcvf $new $old; ' \; 
} 

## Function Call 
## targz [directory] [extension] 
targz . 'exe'; 

y sí que he intentado usar que algo como esto:

new=${old/%$2/tar\.gz}; 

pero genera nombres de archivo como: archivo .exetar.gz

Respuesta

5

Probar:

targz() { 
    find $1 -type f -name "*.$2" -exec \ 
    bash -c 'old=$(basename {}); new=${old/'"$2"'/tar\.gz}; \ 
     tar -zcvf $new $old; ' \; 
} 

El truco es salir de la comilla simple, de modo que se llevará a cabo la expansión de variables.

+0

Gracias, Darron, esto es exactamente lo que necesitaba. – EMC

4

uso env para establecer una variable de entorno para bash:

targz() { 
    find "$1" -type f -name "*.$2" -exec \ 
    env ext="$2" bash -c 'old=$(basename "{}"); new=${old/%$ext/tar\.gz}; \ 
     tar -zcvf "$new" "$old"; ' \; 
} 

He añadido algunas cotizaciones para proteger contra espacios en nombres de archivos.

+0

Gracias Dennis, he aplicado las comillas dobles {} – EMC

+0

Bonito; También vale la pena citar dos veces '$ 1' y' $ 2'. – mklement0

+1

@ mklement0: Listo. Gracias. –

Cuestiones relacionadas