假设我有以下源目录:
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
)。