gsutil rsync有一个“exclude”选项(-x),但没有“include”选项。 是否有一些方法可以包含所选文件而不会使整个目录同步? 除了所需文件之外的所有文件都不起作用,因为随机文件将保存到该目录。
答案 0 :(得分:4)
目前没有"包括" gsutil rsync的选项。
答案 1 :(得分:1)
解决方法是创建一个rsync_include_files目录并用符号链接填充文件。然后rsync rsync_include_files目录:
$GSUTIL rsync -c -C $SOURCE/rsync_include_files/
$DESTINATION/rsync_include_files/
但有一点需要注意。 从备份恢复数据时,文件是符号链接所在的位置,符号链接将丢失。 要完成恢复,需要手动移动文件并重新创建符号链接。
答案 2 :(得分:1)
或者您可以将文件名列表存储在一个数组中,并使用python的负向前瞻断言排除该数组,文件名由|
https://ask.fedoraproject.org/en/question/92498/include-top-directory-files-in-a-backup/
我有一个类似的情况,一行一行的文件复制得太长了。我通过运行
创建一个包含文件列表的数组来接近它gsutil ls gs://<bucket_name>/<file_construct>
然后通过使用|
gsutil -m rsync -c -x ""^(?!${REGEX_INV_EXCLUSION_LST}$).*'" "gs://${source}/" "${dest}/"
答案 3 :(得分:0)
@wolfv - “是否有某种方法可以在不对整个目录进行rsyn的情况下包含所选文件?”
这将允许您排除除您明确要求的文件之外的所有文件:
fx=""
while read f; do
if ! [[ "$f" = "thefileiwanttorsync" ]]; then
[[ ${fx} = "" ]] || fx+="|"
fx+="^${f}\$"
fi
done < <(ls -1 /directory/path)
gsutil rsync -x "${fx[@]}" /directory/path gs://bucket/some/directory/path
@wolfv - “除了所需文件之外的所有文件都不起作用,因为随机文件将保存到该目录。”
我理解第一句话,但不是第二句。
答案 4 :(得分:0)
如果您知道要同步的单个文件的名称,则无需执行Balajee建议的ls命令。只需在反向正则表达式中指定基本文件名即可:
public async Task<IEnumerable<T>> GetAll<T>(string tableName) where T : class
{
var table = this.GetCloudTable(tableName);
TableContinuationToken token = null;
do
{
var q = new TableQuery<T>();
var queryResult = await table.ExecuteQuerySegmentedAsync(q, token);
foreach (var item in queryResult.Results)
{
yield return item;
}
token = queryResult.ContinuationToken;
} while (token != null);
}
此处的示例:https://github.com/GoogleCloudPlatform/gsutil/issues/532#issuecomment-394039557