Estou aposentado, mas costumava ensinar em uma universidade. Eu deveria destruir todos os registros de notas dos alunos (é uma lei), mas acabei de notar que vários dos meus backups têm anos do meu diretório pessoal da escola. Isso inclui soluções de problemas dos alunos e notas. Os que ainda estão descompactados são fáceis porque a estrutura de diretórios me permite abandonar as soluções e notas.
Os arquivos tar são um pouco mais difíceis, e eu me pergunto se há uma maneira de facilitar - apenas copiando para o arquivo tar anther menos algumas coisas que eu poderia especificar com grep. Eu gostaria de manter alguns dos meus trabalhos de pesquisa, então eu não quero simplesmente abandonar a coisa toda.
Felizmente, tudo isso está em disco, não em fita, mas eu tenho MUITOS discos, e só agora demorei quase um dia para montar cada um e listar todos os nomes de arquivos com ls -lR. Então, qualquer coisa para reduzir o trabalho seria bem-vinda.
Não consigo pensar em uma maneira seletiva de "copiar apenas partes de um arquivo tar" que não envolva extrair o arquivo para um local temporário, excluir arquivos indesejados e criar um novo arquivo.
No entanto, você pode copiar todo o arquivo e, em seguida, excluir seletivamente os arquivos com base em uma lista filtrada do conteúdo do arquivo. Por exemplo, dado um arquivo tar com os seguintes arquivos:
então
agora teste um filtro:
(você pode canalizar a saída
tar --list
através de umgrep
filtro para padrões mais complicados). Se parece bom, entãoConfira o resultado
É claro que você pode fazer a mesma coisa no original
foo.tar
, se preferir (simplesmente não há chance de refazer se a exclusão der errado).Observe que ele falhará para nomes de arquivos contendo novas linhas; embora
--files-from
possa ser feito para ler uma lista delimitada por nulo, até onde eu sei,--list
não pode ser feito para emitir um. Além disso,--delete
provavelmente só funciona em arquivos descompactados - se o seu estiver compactado (foo.tar.gz
,foo.tar.xz
etc.), você precisará descompactar primeiro.