如何从多个源目录复制到单个目标?

如何从多个源目录复制到单个目标?

是否可以使用 find 和 rsync 递归复制特定文件类型,但在写入目标时忽略目录结构?换句话说,复制源下每个子目录中的每个 zip 文件,并将它们全部放入一个目标目录中。目标是通过 Samba 共享的同一台计算机上的 NTFS 安装。因为源文件可能会更改或被删除,所以我想使用 rsync。

我一直在尝试按照这些思路整理一些内容,但不确定我是否走在正确的轨道上,或者这是否是最好的方法:

usr/bin/find /SRC -name "*.zip" -exec usr/bin/rsync -vgoth --delete {} /DEST/ \;

我使用完整路径是因为该命令最终将从通过 Crontab 执行的 shell 脚本运行。

答案1

我不知道我是否误解了你的问题,但你提供的线路正在工作(至少在我这边使用 rsync 3.1.2)!

$ tree
.
├── file1.zip
├── folder1
│   └── file2.zip
└── folder2
    └── subfolder
        └── file3.zip

3 directories, 3 files

$ tree $BACKUP_DESTINATION
0 directories, 0 files

$ find . -iname "*.zip" -exec rsync -vgoth {} ${BACKUP_DESTINATION} \;
[...]

$ tree $BACKUP_DESTINATION
.
├── file1.zip
├── file2.zip
└── file3.zip

0 directories, 3 files

正如您所看到的,这 3 个 zip 文件在没有路径的情况下被复制,即使它们位于不同的文件夹中。

您找到更好的解决方案了吗? (也许在 Joe 建议的 rsync 列表中)

(注意:正如 BowlOfRed 在他的评论中指出的那样,--delete我的测试中缺少了(而您在最初的建议中使用了它)。如果我使用此选项,rsync 会失败,因为它抱怨--recursive--dirs丢失。此错误仅存在于版本中2.6.7 所以也许您使用的是旧的 rsync 版本。此外,您没有提到有关删除目标中的文件的任何内容,所以我不知道您是否要保留此选项。)

相关内容