是否可以使用 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 版本。此外,您没有提到有关删除目标中的文件的任何内容,所以我不知道您是否要保留此选项。)