Linux 相当于 robocopy 吗?

Linux 相当于 robocopy 吗?

有趣的是,Linux 命令行工具在很多方面都比 Windows 命令行工具优越得多,但有一件事我还没有找到与之相当的:机器人复制。Robocopy 比 更加通用cp,我不知道如何使用 Linux 工具来做我想做的事情。

一个特定的用例是,我有两个目录,其中的文件大多相似,但其中一个目录有较新的源文件,另一个目录有另一个目录没有的内容文件,并且可能还有较新的源文件(用于网站)。我想将后一个目录中的文件复制到前一个目录中,添加新的内容文件等,但不覆盖目标目录中的较新文件。

我花了大约半个小时尝试弄清楚如何在 Linux 中执行此操作,决定我可能必须学习 bash 脚本或其他东西才能完成我想要的操作,然后我意识到我可以使用 robocopy。我还有一些其他要求。我基本上是将 Python(Django)网站从 SVN 存储库转换为 Git 存储库,我想确保 SVN 中没有未提交的更改。但是,我想有条件地排除目录.svn.pyc已编译的 Python 文件。以下 robocopy 命令正是我想要的:

robocopy source destination /XO /E /XD .svn /XF *.pyc

Linux 中是否有与 Robocopy 相当的东西?我简单研究了rsync一下,但似乎我必须在尝试同步文件夹之前设置一个 rsync 服务器。

答案1

听起来 rsync 肯定是你想要的。你不需要设置“rsync 服务器”来将文件从一台机器复制到另一台机器。Rsync 支持通过 SFTP(SSH 文件传输)复制文件,大多数 Linux 机器已经启用了该功能(如果没有手动禁用)。

参见 Lifehacker 的使用 rsync 跨系统镜像文件更多细节:

无论您想备份数据、安全地分发文件还是通过互联网将工作文档从办公室镜像到家中、在本地网络上的计算机之间或从计算机镜像到 Web 服务器,rsync 都能完成这项工作。今天,我们将使用 rsync 通过命令行上的安全连接在 Mac 和 PC 之间镜像文件夹。

Rsync 是免费的(正如其名称所示)并且跨平台,这意味着它可以在操作系统(Windows/Cygwin、Mac OS、Linux)之间同步文件;它通过 ssh 工作,因此它是加密的并且是安全的;与 FTP 不同,它增加的,因此只有部分已更改文件已传输,不是整个文件,这使得它像 Speedy Gonzalez 一样运行;而且它的命令行使得它可以编写脚本并轻松实现自动化。

答案2

rsync 会像 robocopy 一样将文件从一个目录复制到同一台机器上的另一个目录。以下是与 robocopy 命令等效的 rsync 命令:

rsync -auv --exclude '.svn' --exclude '*.pyc' source destination

这将递归地将源复制到目标并排除旧文件以及“ .svn”和“* .pyc”目录/文件。

答案3

如果您可以不排除.svn目录和.pyc文件,并且如果您的文件和目录名称都不包含空格,那么您可以cp在 GNU/Linux 命令提示符下使用:

cp -uaT source destination

其中sourcedestination是目录。

  • -u选项可确保只有 中的较新版本source才会替换 中的现有文件destination。请参阅https://superuser.com/a/341296
  • -a选项,又名“存档”,递归复制目录,source同时保留时间戳和权限等。
  • -T选项确保我们复制内容进入,而不是目录source本身。directorysource

使用GNU 版本非常重要cp,因为其中一些选项可能在其他 UNIX 版本(例如 macOS)中不同或不可用。

如果您的文件或目录名称中有空格,那么您可以rsync像其他人提到的那样使用,或者使用 管道find连接-print0xargswith -0,您可以查看,但超出了本答案的范围。 这两种可能性都允许排除。

相关内容