我有一个名为“existing_folder”的目录和另一个名为“temp”的目录
我想用 'temp' 的内容以及任何子目录替换 'existing_folder' 的内容。
由于该目录包含网页,因此必须以确保最少停机时间的方式完成此操作。
有没有办法做到这一点?我应该使用什么命令来实现这一目标?
小智 12
你试过rsync吗?
根据您的要求,我认为它是最好的工具。它将仅替换更改的文件,复制新的文件,并且可以删除原始文件。
$ rsync -av --delete temp/ existing_folder/
Run Code Online (Sandbox Code Playgroud)
注意 temp 后面的斜杠,它是必需的,因为您要同步内容。没有它,它会在现有文件夹中创建一个目录临时文件。
delete 参数使不再在 temp 中的文件在 existing_folder 中被删除。
如果添加 -n 参数,您也可以进行试运行。它会告诉您无需执行任何操作即可完成哪些更改。
如果orig_folder和temp都在同一个物理硬盘上,重命名(移动)它们基本上是即时的。这意味着你可以简单地做
mv orig_folder foo && mv temp orig_folder && rm -rf foo
Run Code Online (Sandbox Code Playgroud)
这将重命名orig_folder为foo,然后重命名temp为orig_folder,最后删除foo。在同一个文件系统上,这两个mv操作几乎不需要时间(在我的系统上为 0.004 秒)。
如果源目录和目标目录不在同一个文件系统上,为了尽量减少文件不可用的时间,您首先需要将源目录移动到同一个文件系统,然后重命名:
mv /path/to/temp . && mv orig_folder foo && mv temp orig_folder && rm -rf foo
Run Code Online (Sandbox Code Playgroud)