我可以rsync
在本地文件系统上移动大量文件而不是复制它们吗?我希望它的行为就像改进的mv
命令一样。我知道--remove-source-files
选项,但手册没有说明它是否实际移动文件(所需)或只是复制然后删除(不需要)。
编辑 我想要实现的是 rsync (改进的 mv)将文件移动到合并现有目录的目录中 - 与 rsync -r 相同,但是移动不复制例如
$ tree d1 d2
d1
├── b
├── c
├── d
├── deep_house
│ └── dh1
└── sound
└── sss
d2
├── a
└── deep_house
└── dddx
3 directories, 7 files
$ rsync -r d1/ d2
$ tree d2
d2
├── a
├── b
├── c
├── d
├── deep_house
│ ├── dddx
│ └── dh1
└── sound
└── sss
答案1
Rsync 复制文件。这就是它的作用。即使您告诉它删除源文件,它仍然会先复制它们,而不会移动它们,即使目标恰好位于同一文件系统上。
这mv
来自 GNU coreutils 的实用程序可以选择-u
仅在目标位置早于源位置或尚不存在时才移动文件。这与 rsync 类似-u
。
如果要将目录树移动到现有目录树中,可以使用调用mv
每个文件的递归遍历。如果您不想覆盖现有文件:
cd d1
find . -depth -exec sh -c 'test -e "../d2/$0" || mv "$0" "../d2/$0"' {} \;
如果您确实想要覆盖现有文件,则需要区分现有目录和其他文件,并决定当源具有常规文件而目标具有目录时要执行的操作。
答案2
rsync
复制文件,但从不移动它们。
find
和的组合mv
可能会达到您想要的效果。