Como encontrar tipos de arquivos específicos e tará-los?

Como encontrar tipos de arquivos específicos e tará-los?

Parece que tenho um problema. Tenho alguns tipos de arquivos diferentes em meu diretório atual e quero apenasalcatrãoo.pngarquivos. Eu comecei com isso:

find -name "*.png" | tar -cvf backupp.tar

Não funcionaria porque não especifiquei quais arquivos, então, observando como os outros fizeram isso, adicionei xargs:

find -name "*.png" | xargs tar -cvf backupp.tar

Desta vez funcionou e o arquivo backupp.tar foi criado, mas aqui está o problema. Não consigo extraí-lo. Sempre que digito:

tar -xvf backupp.tar

Nada acontece. Tentei alterar o chmod e o sudo, mas nada cede.

Então, digitei o comando errado completamente ou há algo que perdi?

Responder1

Cada uma de suas duas abordagens estava perto de funcionar, mas cada uma tinha um problema distinto.

Na sua primeira abordagem, você tenta canalizar uma lista de arquivos para tar. Se você quiser tarler a lista de arquivos da entrada padrão, você deve usar as opções -T/ --files-frome , por exemplo-

find -name '*.png' -print0 | tar -cvf backup.tar --null -T - 

Para referência, consulte a documentação oficial:

OBSERVAÇÃO:O uso dos -print0sinalizadores --nulle deve garantir que isso também lide com nomes de arquivos que incluem espaços em branco.

Na sua segunda abordagem, você tenta executar tarvia xargs, mas está usando a opção "criar" ( --create/ -c). Se você usar a opção "criar" com xargsou em um loop for, ela substituirá o arquivo após cada iteração. Em vez disso, tente usar a opção "anexar" ( -a/ --append) ou a opção "atualizar" ( -u/ --update), por exemplo:

find -name "*.png" -exec tar -uvf backupp.tar {} \;

Isso anexará arquivos ao arquivo após cada iteração, em vez de sobrescrevê-lo.

De qualquer forma, quando terminar você pode usar a opção "lista" ( --list/ -t) para visualizar o conteúdo do arquivo e verificar se tudo funcionou conforme o esperado:

tar tf backupp.tar

Responder2

Você pode simplesmente usar o curinga

tar -cvf backup.tar *.png

ou usandofind

find -name "*.png" | tar -cvf backup.tar -T -

a -Topção obtém o nome do arquivo de FILE que neste caso é stdin-

informação relacionada