Parece que tenho um problema. Eu tenho alguns tipos de arquivos diferentes em meu diretório atual e 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, olhando como os outros fizeram, adicionei xargs:
find -name "*.png" | xargs tar -cvf backupp.tar
Funcionou desta vez, e o arquivo backupp.tar foi criado, mas aqui está o problema. Não consigo extraí-lo. Sempre que eu digito:
tar -xvf backupp.tar
Nada acontece. Já tentei trocar chmod e sudo, mas nada cede.
Então, eu digitei o comando errado completamente ou há algo que eu perdi?
Cada uma de suas duas abordagens estava perto de funcionar, mas cada uma tinha um problema distinto.
Em sua primeira abordagem, você tenta canalizar uma lista de arquivos para
tar
. Se você quisertar
ler a lista de arquivos da entrada padrão, deverá usar as opções-T
/--files-from
e-
, por exemploPara obter uma referência, consulte a documentação oficial:
NOTA: O uso dos sinalizadores
-print0
e--null
deve garantir que isso também lide com nomes de arquivos que incluam espaços em branco.Em sua segunda abordagem, você tenta executar
tar
viaxargs
, mas está usando a opção "criar" (--create
/-c
). Se você usar a opção "criar" comxargs
ou em um loop for, ela substituirá o arquivo após cada iteração. Em vez disso, tente usar a opção "acrescentar" (-a
/--append
) ou a opção "atualizar" (-u
/--update
), por exemplo: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 "listar" (
--list
/-t
) para visualizar o conteúdo do arquivo e verificar se tudo funcionou conforme o esperado:Você pode simplesmente usar o curinga
ou usando
find
a
-T
opção obtém o nome do arquivo de FILE que neste caso é stdin-