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

1

Parece que tenho um problema. Eu tenho alguns tipos de arquivos diferentes no meu diretório atual, e eu quero apenas tar os arquivos .png . 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

Funcionou desta vez e o arquivo backupp.tar foi criado, mas eis o problema. Eu não consigo extrair isso. Sempre que eu digito:

tar -xvf backupp.tar

Nada acontece. Eu tentei mudar chmod e sudo, mas nada cede.

Então, eu digitei o comando errado completamente ou há algo que eu tenha perdido?

    
por HabibieND 26.11.2017 / 06:19

2 respostas

2

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

Na sua primeira abordagem, você tenta enviar uma lista de arquivos para tar . Se você quiser que tar leia a lista de arquivos da entrada padrão, será necessário usar as opções -T / --files-from e - , por exemplo,

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

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

OBSERVAÇÃO: O uso dos sinalizadores -print0 e --null deve garantir que isso também lide com nomes de arquivos que incluam espaço em branco.

Na sua segunda abordagem, você tenta executar tar via xargs , mas está usando a opção "criar" ( --create / -c ). Se você usar a opção "criar" com xargs ou em um loop for, ela sobrescreverá o arquivamento após cada iteração. Em vez disso, tente usar a opção "append" ( -a / --append ) ou a opção "update" ( -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ê poderá usar a opção "lista" ( --list / -t ) para visualizar o conteúdo do arquivo e verificar se tudo funcionou como esperado:

tar tf backupp.tar
    
por 26.11.2017 / 06:45
1

Você pode simplesmente usar o curinga

tar -cvf backup.tar *.png

ou usando find

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

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

    
por 26.11.2017 / 06:49