是否可以使用 bash 运行命令,将一个目录结构中的所有文件替换为另一个目录结构中的所有文件。例如,如果我有以下两个目录结构:
dest
dest/A
dest/A/B
dest/A/B/file-1
dest/A/B/file-2
dest/A/B/file-3
dest/A/B/C
dest/A/B/C/file-4
dest/A/B/C/file-5
patch/
patch/A
patch/A/B
patch/A/B/file-2
patch/A/B/C
patch/A/B/C/file-6
...然后我可以运行某种 find/copy/xargs/sed 管道命令来复制每个文件补丁目录下的文件复制到目标目录中的相应位置?如果我这样cp -r patch/A/B dest/A/B
做,我将丢失文件dest/A/B/file-1
等dest/A/B/file-3
。
编辑:
我曾经尝试过自己运行命令,例如find -type f | xargs -I {} cp {} ...
,但是我对 shell 命令不是很有经验,并且没有任何效果(...
命令末尾的 主要是使用 sed 进行的实验,通过用 替换 来转换文件路径./
)dest/
。
答案1
您可以简单地使用 rsync 来实现这一点;rsync -Aax /input/directory/path /output/directory/path
(请注意,标志将保留所有者、组和安全权限)。
我应该补充一点,我认为你的整个问题都源于你的陈述,“如果我这样,cp -r patch/A/B dest/A/B
我就会丢失文件dest/A/B/file-1
等等dest/A/B/file-3
”是不准确的;你也可以简单地运行cp -r patch/A dest/A/
并实现你似乎正在寻找的东西(不会删除任何已经存在的文件)