AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1397925
Accepted
4dummies
4dummies
Asked: 2022-03-17 18:36:26 +0800 CST2022-03-17 18:36:26 +0800 CST 2022-03-17 18:36:26 +0800 CST

Qual a melhor forma de copiar apenas partes de um arquivo tar

  • 772

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.

backup
  • 1 1 respostas
  • 65 Views

1 respostas

  • Voted
  1. Best Answer
    steeldriver
    2022-03-19T11:04:01+08:002022-03-19T11:04:01+08:00

    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:

    $ tar --list -f foo.tar
    a/
    a/c/
    a/c/delete me
    a/c/keep me
    a/d/
    a/d/keep me
    a/e/
    a/e/delete me
    a/e/keep me
    b/
    b/c/
    b/c/delete me
    b/c/keep me
    b/d/
    b/d/keep me
    b/e/
    b/e/delete me
    b/e/keep me
    

    então

    $ cp foo.tar foo.copy.tar
    

    agora teste um filtro:

    $ tar --list -f foo.copy.tar --wildcards '*delete*'
    a/c/delete me
    a/e/delete me
    b/c/delete me
    b/e/delete me
    

    (você pode canalizar a saída tar --listatravés de um grepfiltro para padrões mais complicados). Se parece bom, então

    $ tar --list -f foo.copy.tar --wildcards '*delete*' |
        tar --delete -f foo.copy.tar --verbatim-files-from --files-from=-
    

    Confira o resultado

    $ tar --list -f foo.copy.tar
    a/
    a/c/
    a/c/keep me
    a/d/
    a/d/keep me
    a/e/
    a/e/keep me
    b/
    b/c/
    b/c/keep me
    b/d/
    b/d/keep me
    b/e/
    b/e/keep me
    

    É 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-frompossa ser feito para ler uma lista delimitada por nulo, até onde eu sei, --listnão pode ser feito para emitir um. Além disso, --deleteprovavelmente só funciona em arquivos descompactados - se o seu estiver compactado ( foo.tar.gz, foo.tar.xzetc.), você precisará descompactar primeiro.

    • 2

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve