bash find:查找数组的路径排除的变量列表

时间:2013-03-05 11:56:20

标签: bash find

我有一个脚本,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

1 个答案:

答案 0 :(得分:0)

将排除的目录存储在数组中,然后使用printffind命令中打印出来。

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