Answers:
rsync
这将是一个糟糕的选择,因为它会执行许多客户端/服务器后台工作,这些工作需要考虑本地和远程系统。
mv
可能是最好的选择。如果可能的话,您应该尝试mv directory_old directory_new
而不是mv directory_old/* directory_new/
。这样,您移动一件事而不是一百万件事。
mv
如果我们谈论数百万,通配符扩展可能会破坏支持的最大参数。
mv
只需更新inode信息,即可mv directory_old directory_new
比mv directory_old/* directory_new
find src_image_dir/ -type f -name '*.jpg' -print0 | xargs -0r mv -t dst_image_dir/
find -print0
with xargs -0
允许您在名称中使用空格。xargs -r
mv
除非有要移动的东西,否则它将不会运行。(mv
如果未提供源文件,则会抱怨)。mv -t
允许您先指定所需的目标,然后再指定源文件xargs
。顺便说一句,我会问自己是否真的必须一次移动如此大量的文件。批处理被高估了。如果我能够在事物生成时立即对其进行处理,我就尽量不要积累大量的工作。
如果两个目录位于同一文件系统上,则mv
在DIRECTORY而不是目录的内容上使用。
如果它们位于两个不同的文件系统上,请使用rsync:
rsync -av /source/directory/ /destination
请注意/
源上的尾随。这意味着它将复制目录的内容,而不是目录本身。如果/
不选择,它仍将复制文件,但它们将位于名为的目录中/destination/directory
。使用/,文件将位于/destination
rsync
如果您以超级用户身份运行文件或文件归您所有,则将保持文件所有权。它还将维护mtime
每个文件的。
rsync
似乎会绕圈转mv
。谢谢你的提示!
tar cf - dir1 | (cd dir2; tar xf -)
tar cf - dir1 | ssh remote_host "( cd /path/to/dir2; tar xf - )"
当您使用“ cp”时,每个文件都会执行open-read-close-open-write-close。Tar使用不同的读取和写入过程以及多个分支来一次处理多个文件。即使在单个CPU盒上,多线程应用程序也更快。
tar c | tar x
您将获得O(total_size)而不是O(file_count)的成本。
mv
如果源目录和目标目录都位于同一文件系统中,那么我认为您不能在性能方面胜过。