De quais personagens TAR não gosta?

2

Eu mantenho uma lista de fotos gravadas em dvds para backups incrementais, mas entrei em uma situação estranha onde um arquivo já foi gravado em um dvd, mas o tar continua dizendo que não. Aqui os passos para se reproduzir:

mkdir tarbug && cd tarbug
mkdir -p photos/{1,2,3}
touch "photos/1/P06-23-08_15.21[1].jpg"
touch "photos/2/P06.jpg"
touch "photos/3/P01.jpg"

Crie uma lista de todos os arquivos (normalmente eu adiciono à lista quando um dvd é gravado):

find photos -type f > list

Agora, forneça-me novos arquivos, excluindo os arquivos da lista, e não mostre os diretórios:

tar cf - photos -X list | tar tf - | grep -v '/$'

Resultado:

photos/1/P06-23-08_15.21[1].jpg

Isso não deve aparecer como na lista de arquivos. Eu descobri que são colchetes que precisam ser escapados por barras invertidas? mas como eu deveria saber disso? qualquer lista de caracteres que o tar não gosta ou usa para outra coisa?

    
por vimdude 25.09.2013 / 17:40

1 resposta

7

Se você olhar para a manpage de tar , você verá:

 -X, --exclude-from FILE
       exclude patterns listed in FILE

O documento info fornece mais detalhes.

Portanto, list precisa ser uma lista de padrões, não nomes de arquivos. Um padrão , como normal, significa um padrão curinga da shell. Portanto, no mínimo, * , [ ] e ] são especiais. Possivelmente { e } também.

A documentação também menciona que você pode mudar isso passando --no-wildcards . Então os nomes serão combinados literalmente, não como padrões. --no-wildcards precisa ir antes do -X .

[Este é o tar GNU que eu verifiquei. Outras implementações de alcatrão provavelmente diferem.]

    
por 25.09.2013 / 17:52