我想计算要压缩存档的目录树的大小。我无论如何也想不出/感觉不到 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 服务器。