当我恢复复制文件时,它在两个进程上工作: 1)跳过复制的文件;2)复制文件。正因为如此,这需要很长时间。有什么方法可以在这个过程中跳过这个已经复制的文件吗?
发布于 2018-04-14 15:35:25
是的,这可以通过使用gsutil rsync
命令来实现。
gsutil rsync
命令通过仅复制缺少的文件来同步源目录和目标目录的内容。因此,它比标准的普通cp
命令效率高得多。但是,如果您在cp
命令中使用-n
开关,这将强制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)"
然后使用该变量作为copy命令的目标。
gsutil -m cp $modified gs://publicobject/
你需要弄清楚这是否适用于你的用例,因为尽管它可能会更快,但其他两种方法的一些优点已经丧失(目录的自动同步)。
https://stackoverflow.com/questions/49828032
复制相似问题