Passar lista de diretórios (que contêm espaços em branco) para um comando em um script

1

Por exemplo, eu quero executar o seguinte dentro de um script de shell:

tar cvpzf /destination/backup.tgz /directory\ one /directory\ two

Desejo atribuir a lista de caminhos (com espaços em branco neles) a uma variável na parte superior de um script, para facilitar a manutenção.

Como alguém atribuiria "/ directory \ one / directory \ two" a uma variável e, em seguida, passaria adiante, por exemplo, para tar , ou seja:

#!/bin/sh
backup_dirs=?????????
tar cvpzf /destination/backup.tgz $backup_dirs

sem fazer com que tar interprete /directory e one como entidades separadas, exatamente como não faria isso quando alguém o executa na linha de comando?

    
por silvernightstar 04.09.2015 / 12:40

1 resposta

3

Apenas cite:

dir1="directory 1"
dir2="directory 2"

tar cvpzf /destination/backup.tgz "$dir1" "$dir2"

Ou, se o seu shell for compatível (bash, com o qual você marcou sua pergunta, mas sh , que você está usando no seu script), use arrays:

targets=( "directory 1" "directory 2" )
tar cvpzf backup.tgz "${targets[@]}"
    
por 04.09.2015 / 13:10