2011-06-06 15 views
12

Estoy buscando gzip múltiples archivos (en múltiples archivos .gz) en un directorio manteniendo los originales.Gzip archivos múltiples individualmente y guarde los archivos originales

que puedo hacer archivos individuales utilizando estos comandos:

find . -type f -name "*cache.html" -exec gzip {} \; 

o

gzip *cache.html 

pero tampoco conserva el original. Intenté

find . -type f -name "*cache.html" -exec gzip -c {} > {}.gz 

pero eso solo hizo un archivo {} .gz. ¿Hay una manera simple de hacer esto?

Respuesta

8

Su > en el último comando es analizado por el mismo shell que ejecuta find. Utilice una cáscara anidada:

find . -type f -name "*cache.html" -exec sh -c "gzip < {} > {}.gz" \; 
8

que haría uso de bash(1) 's sencilla for constructo para esto:

for f in *cache.html ; do gzip -c "$f" > "$f.gz" ; done 

Si supiera los nombres de los archivos eran 'sano', que dejaría fuera de la "" alrededor de los argumentos, porque soy perezoso . Y mis nombres de archivo son generalmente sanos. Pero los guiones no tienen ese lujo.

Cuestiones relacionadas