使用 gsutil rsync 时排除小文件

Exclude small files when using gsutil rsync

我想使用 gsutil rsync 将给定文件夹的文件上传到存储桶。但是,我不想上传所有文件,而是想排除小于特定大小的文件。 Unix rsync 命令提供选项 --min-size=SIZE。 gsutil 工具是否有等效项?如果没有,有没有简单的排除小文件的方法?

您没有这个选项。您可以通过编写脚本手动执行并逐个文件发送。但它不是很有效。我建议你这个命令:

find . -type f -size -4000c | xargs -I{} gsutil cp {} gs://my-bucket/path

这里只复制4k以下的文件。这里是查找单元列表

c for bytes
w for two-byte words
k for Kilobytes
M for Megabytes
G for Gigabytes

好的,所以我找到的最简单的解决方案是将小文件移动到一个子目录中,然后使用 rsync(没有 -r 选项)。移动文件的代码:

def filter_images(source, limit):
    imgs = [img for img in glob(join(source, "*.tiff")) if (getsize(img)/(1024*1024.0)) < limit]
    if len(imgs) == 0:
        return

    filtered_dir = join(source, "filtered")
    makedirs(filtered_dir)
    for img in imgs:
        shutil.move(img, filtered_dir)