Eu tenho um arquivo grande foo.tar.xz
que contém muitos arquivos (por exemplo, 200000). Eu descobri que esse arquivo contém alguns arquivos (cerca de 5000) que eu não quero. Não tenho espaço em disco suficiente para descompactar tudo no meu disco; Além disso, receio que atributos / direitos possam se perder se o fizer. No entanto, tenho espaço suficiente para hospedar duas cópias do arquivo compactado . Existe uma ferramenta para remover alguns arquivos do arquivo morto (especificado com uma expressão regular no nome do arquivo) em tempo real, ou seja, sem descompactar o arquivo morto em arquivos individuais?
--wildcards
ajuda ... Eu tive que incluir./
no início do padrão embora ...O tar GNU tem uma
--delete
opção que trabalha com arquivos também hoje em dia.Use-o assim, por exemplo:
Cuidado: Provavelmente não funcionará em nenhum tipo de meio de fita magnética. Mas
tar
não há problemas em trabalhar em um pipe, então você pode simplesmente usar um arquivo tar temporário e substituir a fita depois. Também não funcionará em arquivos compactados, portanto, você precisará descompactar o arquivo.Além disso, a operação será bastante lenta em qualquer caso, devido à natureza linear compactada (por design) dos arquivos tar.
fonte
gtar --delete
.-T
trabalha com--delete
e--wildcards
permite que você use padrões em vez de nomes de arquivos, então crie um arquivo temporário contendo os padrões e o usounxz < file.tar.xz | tar --wildcards --delete -T patternfile | xz > file2.tar.xz
. Não fará um regex completo (se você precisar disso, basta usartar -t
e criar uma lista de nomes de arquivos para excluir), apenas padrões de nomes de arquivos correspondentes.De acordo com o manual , você pode passar uma lista de nomes de arquivos para
tar
extraí-los apenas. Por exemplo:fonte