Como excluir arquivos do arquivo TAR usando expressões regulares?

10

Tenho uma pergunta simples, mas não consigo encontrar ou resolver a resposta. Eu quero fazer um arquivo tar, mas quero excluir alguns arquivos dele usando expressão regular.

Exemplo do arquivo a ser excluído é este: 68x640X480.jpg

Eu tentei isso sem sorte:

tar cvf test.tar --exclude=[0-9]+x[0-9X]+\.jpg /data/foto

Alguém pode ajudar?

Frodik
fonte

Respostas:

11

Você pode usar algumas ferramentas adicionais como finde egrep:

find directory/ -type f -print | egrep -v '[0-9]+x[0-9X]+\.jpg' | tar cvfz directory.tar.gz -T -

A desvantagem do método mencionado acima é que ele não funcionará para todos os nomes de arquivos possíveis. Outra oportunidade é usar a funcionalidade de exclusão interna de tar:

tar -czvf directory.tar.gz --exclude='*x*X*.jpg' directory

Infelizmente, o segundo método não funciona com expressões regulares, mas apenas com caracteres curinga.

Vladimir Blaskov
fonte
Obrigado, é isso que eu estava procurando. Você pode anotar quais nomes de arquivos não funcionariam? por exemplo, contendo quais caracteres?
Frodik 12/10
Você não deve se preocupar muito com isso - a maioria dos nomes de arquivos funciona perfeitamente com essa solução. O problema é que os nomes de arquivo UNIX / Linux podem incluir praticamente tudo, até caracteres de controle - essas combinações obscuras não funcionarão com a primeira solução.
Vladimir Blaskov
Uma boa leitura relacionada com nomes de arquivo UNIX / Linux / POSIX: dwheeler.com/essays/fixing-unix-linux-filenames.html
Vladimir Blaskov
0

Talvez você devesse tentar cpio

http://cybertiggyr.com/cpio-howto

Ele lê da lista de arquivos e faz o arquivamento. Você pode gerar uma lista de arquivos usando o sed, como mostrado abaixo.

ls |sed   '/[0-9]*x[0-9]*X.*/d' >/tmp/files

Você pode usá-lo como entrada para o cpio.

nitinas
fonte