将一个目录复制到另一个目录,同时保留其结构

将一个目录复制到另一个目录,同时保留其结构

假设我有以下源目录:

source/
    subdir1/file1
    subdir1/file2
    subdir2/file3
    subdir3/file4

和目标目录:

target
    subdir1/file5
    subdir2/file6
    subdir4/file7

我想将源子目录的内容移动(但实际上是移动而不是复制和删除)到正确的目标子目录,因此结果如下所示:

target
    subdir1/file1
    subdir1/file2    
    subdir1/file5
    subdir2/file6
    subdir2/file3
    subdir3/file4
    subdir4/file7

是否有一些 Linux 命令可以执行此操作,还是我必须自己编写脚本?

答案1

您可以为此使用 rsync。

rsync -a sourcedir/ destdir/ --remove-sent-files --ignore-existing 

例如:

mtak@frisbee:~$ find test test2
test
test/subdir1
test/subdir1/file2
test/subdir1/file1
test/subdir2
test/subdir2/file2
test/subdir2/file1
test2
test2/subdir1
test2/subdir1/file3
test2/subdir1/file4
test2/subdir2
test2/subdir2/file3
test2/subdir2/file4

mtak@frisbee:~$ rsync -a test/ test2/ --remove-sent-files --ignore-existing --whole-file 

mtak@frisbee:~$ find test
test
test/subdir1
test/subdir2
mtak@frisbee:~$ find test2
test2
test2/subdir1
test2/subdir1/file2
test2/subdir1/file1
test2/subdir1/file3
test2/subdir1/file4
test2/subdir2
test2/subdir2/file2
test2/subdir2/file1
test2/subdir2/file3
test2/subdir2/file4

但这有点像黑客行为,因为它会先复制文件,然后删除源文件(所以它不像mv)。

相关内容