tar: “Não é possível stat” quando dados argumentos como variáveis de shell

0

Eu tenho alguns diretórios em um local, o caminho absoluto desse local é armazenado em PROJECT_HOME . Agora, estou tentando fazer o seguinte em um script:

TARGET_LIST="bin lib scripts deployment"
tar -czf project.tar.gz -C "$PROJECT_HOME" "$TARGET_LIST"

mas o tar me dá o seguinte:

tar: bin lib scripts deployment: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors

O comando tar funciona se eu substituir os valores de TARGET_LIST ( tar -czf project.tar.gz -C "$PROJECT_HOME" lib bin scripts deployment ), mas não quando eu uso a variável.

O que estou fazendo de errado?

    
por Saadat 12.10.2011 / 08:49

2 respostas

1

Colocando $TARGET_LIST entre aspas você está definindo um único argumento com espaços. O tar está procurando por um único arquivo / pasta chamado 'deployment de scripts bin lib'.

Tente com

tar -czf project.tar.gz -C $PROJECT_HOME $TARGET_LIST

sem as aspas

EDITAR Se você tiver espaços em seus nomes de arquivos ou diretórios, precisará usar as matrizes (conforme sugerido por Ignacio)

Exemplo

TARGET_LIST=(bin lib scripts deployment "a directory with spaces")
tar -czf project.tar.gz -C $PROJECT_HOME "${TARGET_LIST[@]}"
    
por 12.10.2011 / 08:56
1

Você está tendo o oposto do problema descrito na entrada <50> da FAQ sobre BASH. Felizmente, a correção é a mesma: use uma matriz.

    
por 12.10.2011 / 08:56

Tags