du 中的命令替换/单词拆分

du 中的命令替换/单词拆分

我想计算要压缩存档的目录树的大小。我无论如何也想不出/感觉不到 bash 中的单词拆分或命令替换(我曾尝试用它们来解决这个问题)是如何运作的。

我想排除几个目录。我将参数放在一个变量中,这些参数也将以相同的方式传递给 tar:

exclude_opts="--exclude='VirtualBox VMs/Windows 7/*'  
--exclude='Software/*'  
--exclude='LSTC/*'"

然后我在给 du 的电话中提到了这一点

$ du -sb $HOME $exclude_opts

38711578819 /home/patrick  
du: cannot access `VMs/Windows': No such file or directory  
du: cannot access `7/*"': No such file or directory  
38711578819 total

ok;$exclude_opts由于某种原因被拆分了。我该如何修复这个问题?我所有的尝试都失败了。

我想在同一个文件中执行此操作;不--exclude-from

答案1

真的收集此类参数时需要使用数组。数组将正确处理空格:

更新:从排除选项中删除单引号和“/*”

exclude_opts=(
  "--exclude=VirtualBox VMs/Windows 7"
  "--exclude=Software"
  "--exclude=LSTC"
)

du -sb "$HOME" "${exclude_opts[@]}"

答案2

我尝试模拟您的情况,发现以下方法有效:

--exclude="Windows 7"

这些不起作用:

--exclude='Windows 7/*'
--exclude='VirtualBox VMs/Windows 7/*'

基本上,如果我只包含直接目录而不包含通配符,它​​就可以工作。我的系统是内核版本为 2.6.9 的 Linux 服务器。

相关内容