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

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

我遇到了 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

这是我没想到的。

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

做这个把戏,而我在想-xr!'.配置/将结束变量赋值,它实际上作为参数的一部分。此外,如果我的变量是数组,它也能完美运行。

顺便说一句,使用“!”退出是行不通的,7z 会给出“错误:命令行不正确”的提示。

相关内容