来自bash脚本的7z不会排除目录

时间:2014-09-24 03:14:54

标签: bash 7zip

我遇到了7z的某种奇怪行为(或者bash,我还不知道。)。 使用以下脚本:

#!/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

另外,最后两行可以很容易地用单行代替:

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

我也试过了:

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

我收到'arch0.7z'文件,但文件夹.config和.cache仍被包含在内,而:

#!/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 ;"

生成一个包含正确排除文件夹的文件。

所以,我想知道,从变量扩展的行之间有什么区别:

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

和我输入的那个:

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

7z工作流程中是否有任何重大变化的原因?

1 个答案:

答案 0 :(得分:1)

这是我不期待的事情。

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

诀窍,虽然我认为 -xr!' .config / ' 中的单引号将结束变量赋值,它实际上是作为论证的一部分。 此外,如果我的变量是一个数组,则完美地工作。

顺便说一句,逃避"!"没有工作,7z说"错误:命令行不正确"为了它。