Quiero saber si es posible tener gunzip
varios archivos y cambiarles el nombre con un comando/script.
Tengo un montón de archivos en el formato:
test.20120708191601.DAT.3599502593.gz
test.20120708201601.DAT.99932140.gz
test.20120708204600.DAT.1184686967.gz
test.20120708212100.DAT.824089664.gz
test.20120708215100.DAT.1286044098.gz
test.20120708222100.DAT.1414234861.gz
Necesito eliminarlos gunzip
y eliminar todo lo que esté después de .DAT
, para que esté en el formato:
test.20120708191601.DAT
test.20120708201601.DAT
test.20120708204600.DAT
test.20120708212100.DAT
test.20120708215100.DAT
test.20120708222100.DAT
Respuesta1
Prueba esto:
for file in *.gz; do
gunzip -c "$file" > "${file/.DAT*/.DAT}"
done
El enfoque utiliza gunzip
la opción para enviar el flujo sin comprimir a la salida estándar ( -c
), de modo que podamos redirigirlo a otro archivo, sin una segunda llamada para cambiar el nombre. El cambio de nombre se realiza en la propia variable de nombre de archivo, mediante bash
sustitución (haga coincidir cualquier patrón global .DAT*
y reemplácelo con .DAT
). El bucle en sí simplemente itera sobre archivos en el directorio actual con nombres que terminan en .gz
.