GNU tar(1)
tiene una opción ordenada llamada --transform
. Desde la página del manual:
--transform, --xform EXPRESSION
usa sed replace EXPRESSION para transformar nombres de archivo
Esto permite la transformación de los nombres de ruta sobre la marcha a medida que se extrae el archivo para que pueda controlar dónde y cómo se extraerá.
Mi pregunta es, ¿hay alguna manera de realizar una transformación similar in situ ; es decir, sin extraer el archivo?
Ejemplo
[user@host]$ tar tf test.tar
./foo/blah ./foo/bleh
[user@host]$ some_deep_magic 's/foo/bar/' test.tar
[user@host]$ tar tf test.tar
./bar/blah ./bar/bleh
Caso de uso
Estoy distribuyendo un tar
archivo a usuarios finales básicamente desorientados y me gustaría que se extraiga en la ruta correcta sin interferencia de mi parte. Estoy tratando de evitar la solución trivial de extraer el archivo, cambiar el nombre de los directorios y volver a empaquetar ya que el archivo es grande.
Respuestas:
Puede montar el archivo con archivemount o mountavfs y volver a crearlo
las operaciones de escritura en el sistema de archivos archivados realizarán una reescritura completa en umount, por lo que no parece una buena opción para archivos grandes.
EDITAR
No conozco los detalles de implementación, pero parece que estamos guardando los archivos de escritura en el paso del sistema de archivos.
Simplemente pruebe para resolver tipos, (sobre un alquitrán de mi / usr)
Salida:
¡Entonces Avfs gana! .
fuente