GCP:gsutil -m cp -rn /下载gs:// my-bucket - 如何跳过已复制的文件

时间:2018-04-14 04:46:57

标签: google-cloud-platform google-cloud-storage

enter image description here

当我继续复制文件时,它可以在两个进程上工作1)跳过复制的文件和2)复制文件。 因此,它花了很长时间。 在此过程中是否有任何方法可以跳过这些已复制的文件?

1 个答案:

答案 0 :(得分:0)

是的,这可以通过使用gsutil rsync命令来实现。

gsutil rsync命令通过仅复制丢失的文件来同步源目录和目标目录的内容。因此,它比标准的vanilla cp命令更有效。 但是,如果您使用带有-n命令的cp开关,则会强制cp命令跳过已复制的文件。因此,使用gsutil rsync是否比gsutil cp -n更快是可以辩论的,并且可能取决于不同的场景。

要使用gsutil rsync,你可以运行这样的东西(-r标志使命令递归):

gustil rsync -r source gs://mybucket/

有关gsutil rsync命令的更多详细信息,请查看here

我知道您对两个命令计算需要复制哪些文件所花费的时间有些担忧。由于gsutil cp -ngsutil rsync命令都需要在源目录和目标目录之间进行比较,因此在复制过程中总会有一定量的开销/延迟,尤其是收藏非常多。

如果你想完全删除这部分过程,而你只想复制少于一定年龄的文件,你可以在源代码中指定它并使用标准的gsutil copy命令查看是否更快。但是,这样做会消除gsutil cp -ngsutil rsync的一些好处,因为源和目标目录之间不再存在直接比较。

例如,您可以在最近修改过的文件源中生成变量,例如,在最后一天内。然后,您可以使用标准gsutil cp命令仅复制这些文件。

例如,要创建一个包含在最后一天内修改的文件列表的变量:

modified="$(find . -mtime -1)"

然后使用该变量作为复制命令的目标。

gsutil -m cp $modified gs://publicobject/

您需要确定这是否适用于您的用例,因为虽然它可能更快,但其他两种方法的一些优点会丢失(目录的自动同步)。

相关问题