我有一个脚本,find
循环一个包含路径列表的外部文件,以便为rsync
构建文件列表。这些路径具有可变数量的路径排除(根本不包括)。我正在尝试扩展一个基于此构建find
排除项的变量。我研究了很多而且很难过。说:
cat backuplist.conf
:
/mnt/some/dir1 /mnt/some/dir1/exclude/dirA /mnt/some/dir1/exclude/dirB
/mnt/some/dir2
主备份脚本的相关部分是:
cat backupscript.sh
:
while read backuppath excludedir1 excludedir2 excludedir3; do
exclude=("${excludedir1}" "${excludedir2}" "${excludedir3}")
find ${backuppath} -not \( -path "*${exclude[0]}" "${exclude[@]:1}") -mtime -10 > file.list
rsync -vPaz --files-from=file.list --otheroptions
done < backuplist.conf
我知道我的那个数组示例都是错误的(除此之外),但我甚至不知道构建数组是否是正确的解决方案,因为它不知道会有多少排除。谁能指出我正确的方向? Bash / CentOS 6
答案 0 :(得分:0)
将排除的目录存储在数组中,然后使用printf
在find
命令中打印出来。
while read backuppath excludeDirs; do
excludeArr=( $excludeDirs )
if [[ ${#excludeArr[@]} == 0 ]]
then
find "${backuppath}" -mtime -10 > file.list
elif [[ ${#excludeArr[@]} == 1 ]]
then
find "${backuppath}" -mtime -10 -not -path "${excludeArr[0]}" > file.list
else
find "${backuppath}" -mtime -10 -not \( -path "${excludeArr[0]}" $(printf -- '-o -path "%s" ' "${excludeArr[@]:1}") \) > file.list
fi
rsync -vPaz --files-from=file.list --otheroptions
done < backuplist.conf