Tengo un archivo grande foo.tar.xz
que contiene muchos archivos (por ejemplo, 200000). Descubrí que este archivo contiene algunos (alrededor de 5000) archivos que no quiero. No tengo suficiente espacio en disco para descomprimir todo en mi disco; Además, me temo que los atributos / derechos podrían perderse si lo hago. Sin embargo, tengo suficiente espacio para alojar dos copias del archivo comprimido . ¿Existe una herramienta para eliminar algunos de los archivos del archivo (especificado con una expresión regular en el nombre del archivo) sobre la marcha, es decir, sin descomprimir el archivo en archivos individuales?
17
gtar --delete
.-T
funciona--delete
y le--wildcards
permite usar patrones en lugar de nombres de archivo, por lo tanto, cree un archivo temporal que contenga los patrones y useunxz < file.tar.xz | tar --wildcards --delete -T patternfile | xz > file2.tar.xz
. No hará una expresión regular completa (si lo necesita, solo usetar -t
y cree una lista de nombres de archivo para eliminar), solo patrones de coincidencia de nombre de archivo.(editado, ya que entendí mal la pregunta, que también fue editada)
Lo mejor que puede hacer es extraer, eliminar y volver a comprimir todo el archivo.
unxz < foobar-old.tar.xz | tar --delete foo/bar | xz > foobar-new.tar.xz
No es posible eliminar archivos de un alquitrán directamente.
tar es un flujo, originalmente diseñado para unidades de cinta que no hacen búsquedas aleatorias, mientras que en teoría podría ser posible en un sistema de archivos de disco hacer un agujero / reescribir el archivo restante, con compresión, el punto es discutible como la mayoría, si no todos Los métodos de compresión dependen en gran medida de los contenidos que ocurrieron anteriormente en el archivo. Para hacer esto en su lugar, necesitará un conocimiento muy detallado sobre el método de compresión y el formato del archivo tar. Eso es complejidad hasta el punto de que nadie se molestaría con eso. Es más barato mantener los archivos e ignorarlos.
Si necesita esta funcionalidad, es probable que tar no sea lo que desea.
fuente
--wildcards
ayuda ... Tuve que incluir./
al comienzo del patrón sin embargo ...De acuerdo con el manual , puede pasar una lista de nombres de archivo
tar
a solo extraerlos. Por ejemplo:fuente