Bash脚本以复制文件夹';s的内容和覆盖目标?

Bash脚本以复制文件夹';s的内容和覆盖目标?,bash,Bash,我只是对bash脚本不太熟悉,我正在尝试实现能够指定源位置(包含文件/子目录的目录)和多个目标目录的列表,以及复制和替换时要从源中排除的文件/目录的列表 脚本应该在每个目标位置循环,从源位置复制文件并在目标位置替换它们,不包括脚本中列出的要跳过的任何文件/目录 在PHP中,它类似于: $source = '/home/user1/public_html'; $destinations = array( 'user2', 'user3', 'user4' ); $exclu

我只是对bash脚本不太熟悉,我正在尝试实现能够指定源位置(包含文件/子目录的目录)和多个目标目录的列表,以及复制和替换时要从源中排除的文件/目录的列表

脚本应该在每个目标位置循环,从源位置复制文件并在目标位置替换它们,不包括脚本中列出的要跳过的任何文件/目录

在PHP中,它类似于:

$source = '/home/user1/public_html';
$destinations = array(
    'user2',
    'user3',
    'user4'
);
$exclude = array(
    '/uploads/custom',
    '/config/conf.php'
);
foreach ($destinations as $destination) {
    $dir = '/home/' .$destination. '/public_html';
    if (is_dir($dir)) {
        exec('cp -R ' .$source. '/* ' .$dir);
        // and somehow exclude overwriting any files / directories matching what's in the $exclude array
    }
}

因此,我的问题是,如何编写具有类似功能的bash脚本?

以下是我如何完成这项工作的:

#!/bin/bash
while IFS= read -r line || [[ $line ]]; do
    if [[ -d "$line" ]]; then
        rsync -rv --exclude-from "exclude.txt" /home/source/public_html/ "$line"
    else
        echo "Directory $line does not exist!"
    fi
done < "accounts.txt"
它循环遍历每个目录,如果目录存在,它将文件从/home/source/public\u html复制到目标。它还读取名为“exclude.txt”的文件,该文件每行包含一个要排除的文件或目录。例:

.git
/uploads/custom
/config/conf.php

您想从/home/user1/public_html复制到另一个目录还是从/home/user1/public_html(源)复制文件到/home/user2/public_html、/home/user3/public_html和/home/user4/public_html(目标),例如。您使用for loop`for((i=1;i)
.git
/uploads/custom
/config/conf.php