7z do script bash não excluirá diretórios

1

Eu encontrei com um comportamento meio estranho de 7z (ou bash, eu não sei ainda). Com o seguinte script:

#!/bin/bash
find /home/user  -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst;
lst1=" -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' "
command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user);
$command

também, as duas últimas linhas podem ser facilmente substituídas por uma única linha:

/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user

Eu também tentei:

command="/usr/bin/7z a  $lst1  -v2048M arch0.7z /home/dh ;"

Eu recebo um arquivo 'arch0.7z', mas as pastas .config e .cache ainda estão sendo incluídas, enquanto:

#!/bin/bash
find /home/user  -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst;
/usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user ;"

gera um arquivo com pastas devidamente excluídas.

Então, eu me pergunto, qual é a diferença entre a linha expandida da variável:

/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user

e o que eu digitei como é:

 /usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user

Existe algum motivo para mudanças tão significativas no fluxo de trabalho 7z?

    
por Dmytro Kh. 24.09.2014 / 05:15

1 resposta

0

Isso é algo que eu não esperava.

lst1=' -xr@/home/me/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -xr!'*.local/*' '
7z a $lst1 -v2048M arch0.7z /home/me

faça o truque, enquanto eu estava pensando que a aspas simples em -xr! ' .config / ' terminarão a atribuição da variável, ela realmente funciona como parte de argumento. Além disso, funciona perfeitamente se minha variável é uma matriz.

A propósito, escapando com "!" não vai funcionar, 7z diz "Erro: linha de comando incorreta" para ele.

    
por 24.09.2014 / 21:28