我对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脚本?
答案 0 :(得分:0)
这是我最终如何做到的:
#!/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"
这是从名为&#34; accounts.txt&#34;的文件中读取的。其中包含所有目标帐户目录,每行一个。例如:
/home/user1/public_html
/home/myblog/public_html
循环遍历每个目录,如果目录存在,则将文件从/ home / source / public_html复制到目标。它还从一个名为&#34; exclude.txt&#34;的文件中读取。包括每行一个,要排除的任何文件或目录。例如:
.git
/uploads/custom
/config/conf.php