O problema não é tar, está no seu código shell. O argumento da opção -C
deve ser um caminho, não um padrão de caractere curinga. Observe que você teve exatamente o mesmo problema com o comando cd
.
Você armazenou um padrão curinga na variável INSTALL_DIR
. Quando você escreve -C $INSTALL_DIR
, isso aplica o operador “split + glob”: pegue o valor da variável, divida-o no espaço em branco e interprete cada palavra como um padrão curinga que é então expandido. Aqui, o valor da variável é /Applications/Adobe Illustrator*/Cool Extras.localized/en_US/Templates
, que é dividido em três palavras /Applications/Adobe
, Illustrator*/Cool
, Extras.localized/en_US/Templates
; a palavra do meio contém um caractere curinga ( *
), portanto, ele é interpretado como um padrão curinga, mas como não corresponde a nenhum arquivo, o padrão é deixado como está. Isso torna o argumento da opção -C
a string /Applications/Adobe
e, em seguida, há mais dois argumentos para o comando tar
: Illustrator*/Cool
e Extras.localized/en_US/Templates
.
Se você usa aspas duplas, então "$INSTALL_DIR"
é simplesmente o valor da variável INSTALL_DIR
. Com o *
ainda nele, uma vez que nunca foi expandido em nenhum ponto.
Como regra geral, os curingas são expandidos em contextos nos quais várias palavras são esperadas. Afinal, em geral, os padrões de caracteres curinga correspondem a vários arquivos. O lado direito de uma atribuição suprime a expansão de curingas, pois espera-se que o resultado seja uma única sequência. Para obter uma lista, atribua a uma variável de array em vez de uma variável de string:
INSTALL_DIRS=(/Applications/Adobe\ Illustrator*/Cool\ Extras.localized/en_US/Templates)
Pode haver vários elementos de matriz, se você tiver várias versões do Illustrator instaladas. Vamos pegar o último elemento.
INSTALL_DIR=${INSTALL_DIRS[$((${#INSTALL_DIRS}-1))]}
Agora, INSTALL_DIR
é um caminho para um arquivo existente (supondo que o curinga tenha correspondido). Você pode usá-lo normalmente (ou seja, você pode expandi-lo entre aspas duplas).
tar -xz "$SOURCE_ZIP" --strip-components 1 -C "$INSTALL_DIR" "*.ait"