当我继续复制文件时,它可以在两个进程上工作1)跳过复制的文件和2)复制文件。 因此,它花了很长时间。 在此过程中是否有任何方法可以跳过这些已复制的文件?
答案 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 -n
和gsutil rsync
命令都需要在源目录和目标目录之间进行比较,因此在复制过程中总会有一定量的开销/延迟,尤其是收藏非常多。
如果你想完全删除这部分过程,而你只想复制少于一定年龄的文件,你可以在源代码中指定它并使用标准的gsutil copy命令查看是否更快。但是,这样做会消除gsutil cp -n
和gsutil rsync
的一些好处,因为源和目标目录之间不再存在直接比较。
例如,您可以在最近修改过的文件源中生成变量,例如,在最后一天内。然后,您可以使用标准gsutil cp
命令仅复制这些文件。
例如,要创建一个包含在最后一天内修改的文件列表的变量:
modified="$(find . -mtime -1)"
然后使用该变量作为复制命令的目标。
gsutil -m cp $modified gs://publicobject/
您需要确定这是否适用于您的用例,因为虽然它可能更快,但其他两种方法的一些优点会丢失(目录的自动同步)。