Script Bash para tar - Quoting issue [duplicate]

0

Eu tenho um script que usa nomes de arquivos como parâmetros posicionais. Eu executo algumas operações nelas e depois as monto. Atualmente meu script não está funcionando. A linha de eco está lá para fins de depuração.

Please clarify this statement

But when I try to tar with in the script if can file the file I want to tar.

SNIPPET

while [[ $# > 0 ]]; do
    key="$1"
    shift
    files=$files" "\"${key}\"
 done

echo tar -cvf backup.tar $files
tar -cvf backup.tar $files

OUTPUT:

tar -cvf backup.tar "test.txt"
tar: "test.txt": Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

Estou usando as aspas duplas em torno do nome do arquivo (test.txt), pois quero manipular arquivos com espaços.

Se eu removesse as aspas do script (\ "), ele funcionaria, mas eu não conseguiria lidar com nomes de arquivos com espaços.

Alguma idéia?

    
por goldengreen 14.10.2017 / 02:22

1 resposta

3

Se você está sempre usando todos os parâmetros, apenas chame tar da seguinte forma: tar -cvf backup.tar "$@" . Caso contrário, se você estiver selecionando um subconjunto (embora não mostre), crie a lista de arquivos em uma matriz como esta:

declare -a files
while [[ $# > 0 ]]; do
    key="$1"
    shift
    # assume some filtering goes on here
    files+=("$key")
 done

tar -cvf backup.tar "${files[@]}"
    
por 14.10.2017 / 02:34