如何将整个目录复制到同名目录中而不替换目标目录中的内容?(相反,我想添加到目标文件夹的内容中)
从 Windows 迁移到 Linux 后,我想找到 Winmerge 的替代软件,或者学习命令行工具来比较和同步 Linux 上的两个文件夹。如果您能告诉我如何在命令行上执行以下任务,我将不胜感激...(我已经研究了 diff 和 rsync,但我仍然需要一些帮助。)
我们有两个文件夹:“/home/user/A”和“/home/user/B”
A文件夹是存放普通文件和文件夹的地方,B文件夹是备份文件夹,作为A文件夹的完整镜像。(B文件夹中没有用户直接保存或修改的内容。)
我的问题是:
如何列出仅存在于文件夹 B 中的文件?(例如,自上次同步以来从文件夹 A 中删除的那些。)
如何将仅存在于文件夹 B 中的文件复制回文件夹 A?
如何列出两个文件夹中都存在但具有不同时间戳或大小的文件?(自上次同步以来已在文件夹 A 中修改的那些。我想避免使用校验和,因为有数以万计的文件,它会使过程太慢。)
如何将文件夹A的精确副本复制到文件夹B中?我的意思是,将文件夹 A 中的所有内容复制到仅存在于文件夹 A 中的文件夹 B 中,并删除仅存在于文件夹 B 中的文件夹 B 中的所有内容,但不涉及两个文件夹中相同的文件。
我想将一组文件从目录 A 复制到目录 B,但需要注意的是,如果目录 A 中的文件与目录 B 中的文件相同,则不应复制该文件(因此其修改时间不应为更新)。有没有办法用现有的工具做到这一点,而无需编写自己的脚本来做到这一点?
详细说明我的用例:我正在.c
临时目录中自动生成一堆文件(通过必须无条件生成所有文件的方法),当我重新生成它们时,我只想复制已更改为实际源目录的那些,保留未更改的(使用它们的旧创建时间)保持不变,以便make
知道不需要重新编译它们。(.c
不过,并非所有生成的文件都是文件,因此我需要进行二进制比较而不是文本比较。)
(注意:这是我在/sf/ask/628708671/#8981762 上提出的问题,我在那里尝试为了加快我用来执行此操作的脚本文件的速度,但我突然想到,我真的应该问是否有比编写自己的脚本更好的方法来执行此操作——尤其是因为在 shell 中执行此操作的任何简单方法脚本将cmp
在每对文件上调用类似的东西,并且启动所有这些进程需要很长时间。)
是否有任何工具可用于在将文件写入磁盘后立即在两个或多个 linux 服务器之间同步文件?该rsync
命令不适合我,因为如果我rsync
在 cron 中设置,我可以设置的最短时间是 1 分钟,但我需要实时设置。
当我第一次接触 Linux 时,2000 年在 Cisco Systems 工作,我被教导了该sync
命令的优点,用于将缓冲区刷新到磁盘以防止文件系统损坏/数据丢失。不仅那里的同事告诉我,大学里的朋友也告诉我总是跑sync
“几次”或“一堆”,也就是说,也许 5-10 次,而不是一次。
从那以后我一直保持这个习惯,但是,这有什么好处吗?有没有其他人听说过这个?最重要的是,任何人都可以为/反对您需要sync
多次运行才能有效的想法提供良好的基本原理/经验证据吗?
我有一个 node.js 进程,用于fs.appendFile
向file.log
. 仅附加每行大约 40 个字符的完整行,例如调用 like fs.appendFile("start-end")
,而不是 2 个调用 likefs.appendFile("start-")
和fs.appendFile("end")
。如果我将此文件移动到file2.log
我可以确保没有丢失或部分复制行吗?
我碰巧知道 rsyn,我使用 rsync 在我的 mac 和 linux 服务器之间进行同步,如下所示。
rsync -r -t -v MAC LINUX
rsync -r -t -v LINUX MAC
Run Code Online (Sandbox Code Playgroud)
我希望运行第一个命令进行同步,但是当在 LINUX 中进行更改时,我也需要第二个命令。
我错过了什么吗?rsync 是否可以选择在两个目录之间进行同步?
我有两个驱动器具有相同的文件,但目录结构完全不同。
有没有办法“移动”目标端的所有文件,使它们与源端的结构相匹配?也许用脚本?
例如,驱动器 A 具有:
/foo/bar/123.txt
/foo/bar/234.txt
/foo/bar/dir/567.txt
Run Code Online (Sandbox Code Playgroud)
而驱动器 B 具有:
/some/other/path/123.txt
/bar/doo2/wow/234.txt
/bar/doo/567.txt
Run Code Online (Sandbox Code Playgroud)
有问题的文件很大(800GB),所以我不想重新复制它们;我只想通过创建必要的目录和移动文件来同步结构。
我正在考虑一个递归脚本,它会在目标上找到每个源文件,然后将其移动到匹配的目录,如有必要,创建它。但是——这超出了我的能力!
这里给出了另一个优雅的解决方案:https : //superuser.com/questions/237387/any-way-to-sync-directory-structure-when-the-files-are-already-on-both-sides/238086
使用Linux命令行,我使用scp
命令,从某个目录复制所有文件和文件夹。但是,我不喜欢消耗带宽,因为复制我很少改变的东西,比如我的tiny_mce
文件夹。复制所有内容但跳过一小部分文件夹的技巧是什么?
我正在 Ubuntu 12.04 上进行本地同步。这些文件通常是小的文本文件(代码)。
我想从复制(保留修改时间标记)source
目录target
,但我只想要复制如果文件target
已经存在,而且是较旧的一个比source
。
所以我只复制较新的文件source
,但它们必须存在,target
否则不会被复制。(source
将有比target
.多得多的文件。)
我实际上将从source
多个target
目录复制。我会提到这一点,以防它影响解决方案的选择。但是,如果需要,我可以轻松地多次运行我的命令,target
每次都指定新的。
synchronization ×10
files ×4
file-copy ×3
rsync ×3
linux ×2
ssh ×2
backup ×1
buffer ×1
directory ×1
mv ×1
open-files ×1
remote ×1
scp ×1
shell ×1
timestamps ×1